問題タブ [rule-of-three]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - スタック変数をコピーするときの異常なデストラクタの動作
スタック変数の代入を上書きする前にデストラクタが呼び出されたかどうかを確認するテストを作成しましたが、結果の合理的な説明が見つかりません...
これは私のテストです (Visual C++ 2008 リリース モードで):
仮説が正しければ「abcd」、偽であれば「d」を期待していました。代わりに「bcdx」が表示されます。「x」は、ランダムなヒープ値を読み取っていることを示す ptr に割り当てられているメモリの量に応じて変化します。
何が起こっていると思いますか(間違っている場合は修正してください)、各コンストラクター呼び出しが新しいスタック値を作成し(それらをs1、s2、s3、s4と呼びましょう)、割り当てによってs1.ptrがs4.ptrによって上書きされたままになります. s4 はコピーの直後に破棄されますが、s1 (ダングリング ptr を含む) はスコープを離れると破棄され、s4.ptr が二重に削除され、元の s1.ptr は削除されません。
shared_ptrs の使用を伴わない、この役に立たない動作を回避する方法はありますか?
編集: 「削除」を「削除 []」に置き換え
c++ - STLベクターへのオブジェクトの保存-最小限のメソッドセット
STLコンテナに保存したい複雑なオブジェクト(明示的にマロックされた内部データを含む)の「最小限のフレームワーク」(必要なメソッド)とは何<vector>
ですか?
私の仮定(複雑なオブジェクトDoitの例)の場合:
与える
とvalgrindで:
アップデート:
このようなオブジェクトの最小メソッドは次のとおりです:(sbi回答に基づく)
c++ - C++ コピー コンストラクター + ポインター オブジェクト
私は C++ で "ビッグ スリー" を学ぼうとしています.. "ビッグ スリー" の非常に単純なプログラムを作成することができました.. しかし、オブジェクト ポインターの使用方法がわかりません.. 以下は私の最初の試みです.
これを書いていて疑問が…
質問
- これは、デフォルトのコンストラクターを実装する正しい方法ですか? 持つ必要があるかどうかはわかりません。しかし、ポインターを使用したコピーコンストラクターに関する別のスレッドで見つけたのは、コピーコンストラクターでアドレスをコピーする前に、そのポインターにスペースを割り当てる必要があるということです..
- コピーコンストラクターでポインター変数を割り当てる方法は? Copy Constructor の書き方が間違っているかもしれません。
- コピー コンストラクターと operator= の両方に同じコード ( return を除く) を実装する必要がありますか?
デストラクタでポインタを削除する必要があると言うのは正しいですか?
/li>
実装
前もって感謝します。
c++ - 三つのルールとは何ですか?
- オブジェクトのコピーとはどういう意味ですか?
- コピーコンストラクタとコピー代入演算子とは何ですか?
- いつ自分で宣言する必要がありますか?
- オブジェクトがコピーされないようにするにはどうすればよいですか?
c++ - C ++で割り当てる場合、割り当てたオブジェクトは破棄されますか?
次のコードフラグメントはリークしますか?そうでない場合、foobar()で構築された2つのオブジェクトはどこで破棄されますか?
c++ - Rule-of-ThreeはC++11でRule-of-Fiveになりますか?
したがって、右辺値参照に関するこの素晴らしい講義を見た後、Philippが動的に割り当てた場合、Philippが回答で指摘しているように、すべてのクラスがそのような「ムーブコンストラクター」、template<class T> MyClass(T&& other)
編集、そしてもちろん「ムーブ代入演算子」の恩恵を受けると思いました。template<class T> MyClass& operator=(T&& other)
メンバー、または一般的にポインタを格納します。前述のポイントが当てはまる場合は、コピーコンストラクタ、代入演算子、およびデストラクタが必要です。考え?
c++ - C++ 継承に関する質問
これについて質問があります:
最後の行がmain
コンパイルされる理由を教えてください。代わりにオブジェクトを期待するint
intoのコンストラクターを渡します。はinのコンストラクタに変換されていると思いますが、なぜですか?B
A
int
A
B
前もって感謝します。
アヴリ。
c++ - C ++で「The Big Three」を適切に使用する方法の例を教えてください。
重複の可能性:
3 つのルールとは?
こんにちは、私はこのトピックについて読んでおり、多くの Web サイトで、なぜ ctor、copy ctor、および dtor が必要なのかについて説明されています。しかし、それらの使用方法に関する良い例を見つけるのに苦労しました。また、パラメーターをコピー ctor に const として渡す必要がある理由もよくわかりません。どんな助けでも大歓迎です!
c++ - 安全な割り当てとコピーアンドスワップのイディオム
私は c++ を学んでおり、最近 (ここではスタック オーバーフローで) コピー アンド スワップ イディオムについて学びましたが、それについていくつか質問があります。たとえば、コピー アンド スワップ イディオムを使用する次のクラスがあるとします。
私の質問は、データとして Foo オブジェクトを持つが、カスタムのコピーや割り当てが必要なポインターやその他のリソースを持たない別のクラスがあるとします。
今、私は一連の質問があります:
クラスに対して上記で実装されたメソッドとコンストラクターは
Bar
安全ですか? コピーアンドスワップを使用してFoo
、割り当てまたはコピー時に害がないようにしBar
ますか?コピーコンストラクターとスワップで引数を参照渡しすることは必須ですか?
の引数が
operator=
値渡しされると、この引数に対してコピー コンストラクターが呼び出されて、オブジェクトの一時的なコピーが生成され、次に と交換されるのはこのコピーであると言うのは正しい*this
でしょうか? 参照で渡した場合operator=
、大きな問題が発生しますよね?このイディオムがコピーと代入で完全な安全性を提供できない状況はあり
Foo
ますか?
c++ - 三つのルールでデフォルト以外のコンストラクターが考慮されないのはなぜですか?
三つのルール(ビッグスリーの法則またはビッグスリーとも呼ばれます)は、C ++の経験則であり、クラスが次のいずれかを定義する場合、デストラクタ、コピーコンストラクタ、コピー代入演算子。
デフォルト以外のコンストラクターがそれらの1つと見なされないのはなぜですか?クラスで管理されているリソースがある場合、プログラマーはとにかくデフォルト以外のコンストラクターを定義する必要があります。