3

auto_ptrクラスについてのまともな教科書でかなりの量を読みました。私はそれが何であるか、そしてコンストラクターのような場所で例外を取得する問題をどのように回避するかを理解していますが、誰かが実際にそれをいつ使用するかを理解するのに苦労しています。

auto_ptrは単一の型のみを保持できます(配列new []の初期化はサポートされていません)。関数に渡すか、複製しようとすると、所有権が変更されます(参照カウントスマートポインターではありません)。

このクラスの現実的な使用シナリオにはどのような制限がありますか?ほとんどの場合、スタック変数上でポインターを使用する理由さえないので、その使用の教科書の例のほとんどが到達しているようです...

とにかく、私は私の暴言を止めます-しかし、あなたが短い例/説明またはこれのための良い使用シナリオへのリンクを提供することができれば、私は感謝するでしょう。状況に遭遇した場合に備えて、実際にどこで使用すべきかを知りたいだけです。学んだことを練習するのが好きなので、覚えています。

4

2 に答える 2

7

良い使い方の簡単な例を紹介します。このことを考慮:

auto_ptr<SomeResource> some_function() {
    auto_ptr<SomeResource> my_ptr = get_the_resource();

    function_that_throws_an_exception();

    return my_ptr;
}

例外を発生させる関数は通常、ポインタを失い、ポイントされたオブジェクトは削除されません。これauto_ptrでは、割り当てられていない場合(たとえば、でreturn)、作成されたフレームを離れるときに破棄されるため、これは発生しません。

于 2011-08-18T15:13:23.063 に答える
4

auto_ptr現在完成しているC++11標準では非推奨になりました。一部の代替品は、TR1またはBoostライブラリからすでに入手できます。例はshared_ptrunique_ptrscoped_ptrブースト中)です。

于 2011-08-18T15:10:50.103 に答える