如何创建一个shared_ptr来传递给一个带空格的函数*

时间:2010-03-23 19:37:49

标签: c++ boost shared-ptr

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

2 个答案:

答案 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一样高效(可能更好)