2

自動ポインタのコンテナは使用すべきではなく、問題を引き起こす可能性があることを私は知っています。その実際の理由は何ですか?コンテナで安全に使用できる他の種類の「スマート」ポインタはありますか?

4

3 に答える 3

11

コンテナ要素は本当にコピー可能でなければなりません。auto_ptrはそうではありません。コピーを作成すると、元のファイルが変更されます(所有権が失われます)。2つのポインターは後で所有権を共有するため、boost::shared_ptrをコピーできます。したがって、STLコンテナで使用できます。

于 2010-05-20T08:02:40.923 に答える
3

問題は、のコピーセマンティクスにありauto_ptrます。2つの自動ポインタを割り当てると、RHSはメモリの所有権をLHSに譲ります。これは、割り当ての署名が次のとおりであることを意味しますauto_ptr& operator=( auto_ptr& rhs )(RHSにはないことに注意してくださいconst)。したがって、多くの場合、コンパイルすらされません。

コンテナで使用できる他のスマートポインタがあります。TR1には、shared_ptrモデル化されたboost::shared_ptrものがあります(一部のコンパイラでは、ブーストのコードがコピーされ、名前空間が変更されています)。Boostには、これが次の標準boost::unique_ptrの代わりになることもあります。auto_ptr移動セマンティクスを使用して単一の所有権をモデル化するため、追加の使用コストなしで内部で使用できますshared_ptr(ほとんどの場合、コストが目立つわけではありません)。

于 2010-05-20T08:11:44.813 に答える
0

fasが知っているように、auto_ptrsはコピー時に問題が発生するため、STLコンテナーでは使用しないでください。shared_ptrsはあなたの選択です。

于 2010-05-20T08:02:52.730 に答える