[解決済み] 移動したコンテナを再利用?
2023-03-21 16:36:31
質問
移動したコンテナを再利用する場合の正しい方法を教えてください。
std::vector<int> container;
container.push_back(1);
auto container2 = std::move(container);
// ver1: Do nothing
//container2.clear(); // ver2: "Reset"
container = std::vector<int>() // ver3: Reinitialize
container.push_back(2);
assert(container.size() == 1 && container.front() == 2);
C++0x標準ドラフトを読んだ限りでは、ver3が正しいようです。移動後のオブジェクトは
"特に指定がない限り、移動元のオブジェクトは、有効だが指定されていない状態に置かれるものとする。 を有効だが指定されていない状態に置くものとします。
私は、"others specified"である例を見つけたことがありません。
私はver3が少し回りくどいと感じ、ver1の方がずっと良かったのですが、vec3はいくつかの追加最適化を可能にしますが、一方で簡単にミスを引き起こしかねません。
私の仮定は正しいですか?
どのように解決するのですか?
仕様書 17.3.26 項より "valid but unspecified state" です。
オブジェクトの不変量が満たされ、オブジェクトに対する操作がその型に対して指定されたように動作すること以外は指定されていないオブジェクトの状態 [ 例: もしオブジェクト
x
という型のstd::vector<int>
は有効だが指定されていない状態である。x.empty()
は は無条件に呼び出されx.front()
が呼び出されるのはx.empty()
が false を返した場合のみ呼び出されます。-終了例 ]。
したがって、オブジェクトは生きています。前提条件を必要としない操作であれば(最初に前提条件を検証しない限り)実行することができます。
clear
は、例えば、前提条件を持ちません。そして、それはオブジェクトを既知の状態に戻します。だから、それをクリアして普通に使うだけでいい。
関連
-
[解決済み】クラステンプレートの引数リストがない
-
[解決済み】C++コンパイルタイムエラー:数値定数の前に期待される識別子
-
[解決済み】C++エラーです。"配列は中括弧で囲まれたイニシャライザーで初期化する必要がある"
-
[解決済み】「corrupted size vs. prev_size」glibc エラーを理解する。
-
[解決済み] 式はクラス型を持つ必要があります。
-
[解決済み】クラステンプレートの使用にはテンプレート引数リストが必要です
-
[解決済み] 解決済み] `pthread_create' への未定義の参照 [重複] [重複
-
[解決済み】クラスのコンストラクタへの未定義参照、.cppファイルの修正も含む
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み] 移動したオブジェクトはどうすればいいですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】 unsigned int vs. size_t
-
[解決済み】構造体のベクター初期化について
-
[解決済み] エラーが発生する。ISO C++は型を持たない宣言を禁じています。
-
[解決済み】「corrupted size vs. prev_size」glibc エラーを理解する。
-
[解決済み] 非常に基本的なC++プログラムの問題 - バイナリ式への無効なオペランド
-
[解決済み】C++プログラムでのコンソールの一時停止
-
[解決済み】ファイルから整数を読み込んで配列に格納する C++ 【クローズド
-
[解決済み】エラー:不完全な型へのメンバーアクセス:前方宣言の
-
[解決済み] 解決済み] `pthread_create' への未定義の参照 [重複] [重複
-
[解決済み] 警告:暗黙の定数変換でのオーバーフロー