[解決済み】標準コンテナでstd::auto_ptr<>を使うのはなぜいけないのでしょうか?
2022-04-07 02:05:25
質問
を使用するのはなぜいけないのでしょうか?
std::auto_ptr<>
を標準のコンテナで使用することはできますか?
解決方法は?
C++規格では、STLの要素は、"copy-constructible" および"assignable.quot; でなければならないとされています。言い換えれば、要素は割り当てまたはコピーが可能で、2つの要素は論理的に独立していなければなりません。
std::auto_ptr
はこの要件を満たしていない。
たとえば、こんなコードです。
class X
{
};
std::vector<std::auto_ptr<X> > vecX;
vecX.push_back(new X);
std::auto_ptr<X> pX = vecX[0]; // vecX[0] is assigned NULL.
この制限を克服するためには
std::unique_ptr
,
std::shared_ptr
または
std::weak_ptr
C++11を持っていない場合は、スマートポインタまたは同等のブーストポインタを使用します。
これらのスマートポインタに関するboostライブラリのドキュメントを紹介します。
関連
-
[解決済み】Enterキーを押して続行する
-
[解決済み] using namespace std;」はなぜバッドプラクティスだと言われるのですか?
-
[解決済み] なぜテンプレートはヘッダーファイルでしか実装できないのですか?
-
[解決済み] なぜ、オブジェクトそのものではなく、ポインタを使用しなければならないのですか?
-
[解決済み] 未定義の動作とシーケンスポイント
-
[解決済み] C++の識別子でアンダースコアを使用する場合のルールについて教えてください。
-
[解決済み] マクロで無意味なdo-while文やif-else文を使っているのはなぜですか?
-
[解決済み] iostream::eof がループ条件の中 (つまり `while (!stream.eof())`) にあるのはなぜいけないとされているのでしょうか?
-
[解決済み] なぜC++ STLは "ツリー "コンテナを提供しないのですか?
-
[解決済み】なぜC++プログラマは'new'の使用を最小限に抑えなければならないのでしょうか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] error: 'ostream' does not name a type.
-
[解決済み] 非常に基本的なC++プログラムの問題 - バイナリ式への無効なオペランド
-
[解決済み】デバッグアサーションに失敗しました。C++のベクトル添え字が範囲外
-
[解決済み】エラー:不完全な型へのメンバーアクセス:前方宣言の
-
[解決済み】演算子のオーバーロード C++; <<操作のパラメータが多すぎる
-
[解決済み】デバッグアサーションに失敗しました
-
[解決済み】変数やフィールドがvoid宣言されている
-
[解決済み】C++のコード/プロジェクトでメモリリークを見つけるには?
-
[解決済み】std::vectorはpush_backでオブジェクトをコピーしているのか?
-
[解決済み] コンテナには、オブジェクト全体とオブジェクトへのポインタのどちらを格納すべきですか?