这几乎是它。我需要分配内存并把它传递给接受一个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矢量(也许更好)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top