2

差不多就是这样。我需要分配内存并将其传递给一个接受 void * 的函数。我想使用 shared_ptr 但我不知道该怎么做。

4

2 回答 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 回答