1

私はc ++のauto_ptrとunique_ptrなどを読んでいて、遊んでいるクラスでそれらを使用しようと考えていました...しかし、うまく機能させるのに苦労していました...

これらのポインターを自動ポインターまたは同等のものに変換して、ポインターの削除が自動的に処理されるようにするにはどうすればよいですか?

ヘッダー - http://ideone.com/Z9bc5 本文 - http://ideone.com/WfwBY

現時点では通常のポインターを使用して動作していますが、アクセス違反エラーが発生することがあります。私はそれが何を引き起こしているのかを知っていると確信しています..しかし、「最良の」方法は、最近c ++ 11に追加された自動削除機能を使用することでしょうか?

前もって感謝します。

4

1 に答える 1

1

使用しないでくださいauto_ptrunique_ptrまたはのいずれかを試してくださいshared_ptr。いつ使用するかを説明するSutterは次のとおりです。

疑わしい場合は、デフォルトでunique_ptrを選択してください。必要に応じて、後でいつでもshared_ptrに移動変換できます。ただし、最初から共有所有権が必要であることがわかっている場合は、make_sharedを介してshared_ptrに直接アクセスしてください(以下の#2を参照)。

彼のブログ投稿からも:

3. auto_ptrとの取引は何ですか?

auto_ptrは、C++が移動セマンティクスを持つ前にunique_ptrを作成する勇敢な試みとして最も慈善的に特徴付けられます。

auto_ptrは非推奨になり、新しいコードでは使用しないでください。機会があれば、コードベースでauto_ptrをunique_ptrにグローバルに検索して置換してみてください。ほとんどの使用法は同じように機能し、(コンパイル時のエラーとして)公開したり、(サイレントに)修正したりする可能性があります。

したがって、メンバー宣言は次のように変更されます。

 sf::Texture * tSpriteSheet;

に:

 std::unique_ptr<sf::Texture> tSpriteSheet;

生のポインタを返すメンバー関数については、当然の選択ですunique_ptr。クラスが移動できない場合は、を返すことはできません。したがって、次のいずれかを実行できます。

  • 署名をそのまま保持する
  • を返すconst& unique_ptr<T>
  • オブジェクトへの参照を返します

ニーズに最適なものを選択してください。

于 2012-06-16T02:35:24.413 に答える