1

重複の可能性:
標準コンテナでstd :: auto_ptr <>を使用するのはなぜ間違っているのですか?

ポインタにオブジェクトを返す関数があるので、次を使用します。

vector <auto_ptr <Object> > func() { ... }

安全かどうか知りたいのですが?

4

1 に答える 1

0

stl は、要素をコピーして、そのアルゴリズムで一時的なコピーを使用するのが好きです (つまり、「コピー構築可能」かつ「割り当て可能」である必要があります)。これは には当てはまりませんがauto_ptr。ポインターを別のものに割り当てるauto_ptrと、ポインターの所有権が譲渡されます。

auto_ptr<foo> A = B;B は になりNULL、A はポインターの新しい所有者になり、B は使用できなくなります。また、一時オブジェクトが所有権を取得すると、それは返されず、NULL代わりにぶら下がっているポインターまたはポインターのベクトルがあります。

C++11 スマート ポインターを使用するか、スマート ポインターをブーストするか、自分で実装することができます。

于 2012-10-11T08:57:47.317 に答える