1. ホーム
  2. c++

[解決済み】標準コンテナでstd::auto_ptr<>を使うのはなぜいけないのでしょうか?

2022-04-07 02:05:25

質問

を使用するのはなぜいけないのでしょうか? std::auto_ptr<> を標準のコンテナで使用することはできますか?

解決方法は?

C++規格では、STLの要素は、"copy-constructible" および"assignable.quot; でなければならないとされています。言い換えれば、要素は割り当てまたはコピーが可能で、2つの要素は論理的に独立していなければなりません。 std::auto_ptr はこの要件を満たしていない。

たとえば、こんなコードです。

class X
{
};

std::vector<std::auto_ptr<X> > vecX;
vecX.push_back(new X);

std::auto_ptr<X> pX = vecX[0];  // vecX[0] is assigned NULL.

この制限を克服するためには std::unique_ptr , std::shared_ptr または std::weak_ptr C++11を持っていない場合は、スマートポインタまたは同等のブーストポインタを使用します。 これらのスマートポインタに関するboostライブラリのドキュメントを紹介します。