差不多就是这样。我需要分配内存并将其传递给一个接受 void * 的函数。我想使用 shared_ptr 但我不知道该怎么做。
问问题
982 次
2 回答
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));
于 2010-03-23T19:41:08.647 回答
-3
您还可以使用 std::string 作为引用计数的内存 blob 容器。它与 char * 向量上的 shared_ptr 一样有效(也许更好)
于 2010-03-23T19:51:18.840 回答