1

特にSTLでは、自動ポインタ(およびその理由)に注意する必要があることを認識しています。しかし、私はこれに問題はありません:

std::map<T1, std::auto_ptr<T2> >;

これは安全ですか?


std::vectorアイテムを時々コピーする必要があるため、でどのように壊れるかがわかりますが、これは ? の値の型にも当てはまりstd::mapますか?


編集:どうやら、安全かどうかに関係なく、(技術的に) マップにデータを入力することはできませんが、理論的な考慮事項のために質問を開いたままにします。それ以外の場合は、閉じていると見なします。

4

2 に答える 2

2

安全ではありません。のコピー コンストラクターまたはコピー代入演算子を使用して作成されたコピーは、コピー操作後のコピーのソースと同等ではないため、技術的には、 CopyConstructibleまたはAssignablestd::auto_ptrの要件を満たしていません。これらの要件は、標準コンテナで使用されるすべてのタイプで満たされている必要があります。auto_ptr

1 つの特定のユース ケースの 1 つの実装で期待どおりの動作が得られたように見えるかもしれませんが、コンテナーの要件に違反すると、コードがすべての状況で機能するとは期待できません。

于 2011-11-26T20:07:19.780 に答える
0

まだ安全ではありません。少なくとも、マップからポインターを初めて取得したときに、所有権を譲渡して無効にします。

auto_ptr の有効な使用例は非常に限られています。私が覚えている唯一の例は、オブジェクトが、ユーザーが渡すポインターの所有権と責任を負うことを明示的に明らかにしたい場合です。

于 2011-11-26T19:10:27.093 に答える