1

私はstd::unique_ptrdeleterで使用しようとしています。これは私のコードです:

template<class T>
struct Deleter
{
    void operator()(T* p) 
    {
        delete[] p;
    }
};

void Test()
{
    vector<unique_ptr<char>> v;

    for(size_t i = 0; i < 5; ++i)
    {
        char* p = new char[10];
        sprintf(p, "string %d", i);
        v.push_back( unique_ptr<char, Deleter<char>>(p) );  // error is here
    }
}

エラー C2664: 'void std::vector<_Ty>::push_back(std::unique_ptr &&)': パラメーター 1 を 'std::unique_ptr<_Ty,_Dx>' から 'std::unique_ptr<_Ty> && に変換できません'

コンパイラ: VC++ 2012。これを修正するにはどうすればよいですか? 私の目標は、 default の代わりにunique_ptr呼び出すカスタム deleter を使用することです。delete[]delete

4

2 に答える 2

8

unique_ptr配列についてはすでに知っているので、必要はありません!

std::unique_ptr<char[]> p(new char[10]);
sprintf(p.get(), "...");

アレイの特殊化により、アレイのようなアクセスも可能になりますp[0] = 'a';

もちろん、ベクトルタイプは一致する必要があります。std:vector<std::unique_ptr<char[]>>

于 2013-03-04T09:30:52.827 に答える
4

unique_ptr<char>unique_ptr<char, Deleter<char>>は2つの異なるタイプです。したがって、ベクトルを次のように宣言する必要があります。

vector<unique_ptr<char, Deleter<char>>> v;
于 2013-03-04T09:30:56.817 に答える