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 * vectorのshared_ptrと同じくらい効率的です(多分もっと良いです)

于 2010-03-23T19:51:18.840 に答える