怎样才能创建一个shared_ptr传递给带有空白的功能*
-
21-09-2019 - |
题
这几乎是它。我需要分配内存并把它传递给接受一个void *的功能。我想用一个shared_ptr,但我不知道该怎么做。
解决方案
你的意思是这样的:
boost::shared_ptr<int> myInt(new int(5));
call_some_function(myInt.get());
这不仅让我们的功能使用int*
。它不应该尝试将其删除或采取所有权。
如果你只想原始内存,使用vector
:
std::vector<char> memory(blockSize);
call_some_function(&blockSize[0]);
再次存储器属于vector
。
如果你的函数的不的想所有权,没有必要把它包装成的东西,因为你不会管理它:
call_some_function(new int);
call_some_function(new char[blockSize]);
请确保该功能将被一起delete
/ delete[]
释放呼叫它。如果不是(例如,它打算利用free()
),你需要使用malloc
代替:
template <typename T>
T* malloc_new(void)
{
void* memory = std::malloc(sizeof(T));
if (!memory)
throw std::bad_alloc();
try
{
return new (memory) T();
}
catch(...)
{
std::free(memory);
throw;
}
}
call_some_function(malloc_new<int>());
call_some_function(malloc(blockSize));
其他提示
也可以使用的std :: string作为参考计数存储器团块容器。它是一样有效对char *的shared_ptr矢量(也许更好)
不隶属于 StackOverflow