这就是它。我需要分配内存并将其传递给一个带有void *的函数。我想使用shared_ptr,但我不知道该怎么做。
答案 0 :(得分:5)
你的意思是:
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));
答案 1 :(得分:-3)
你也可以使用std :: string作为引用计数的内存blob容器。它与char * vector上的shared_ptr一样高效(可能更好)