問題タブ [copy-constructor]
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++ - C++でコピーコンストラクタと代入演算子を書くためのチェックリスト
例外の安全性を維持し、メモリリークなどを回避するために、コピーコンストラクタと代入演算子がC++で実行する必要のあるタスクのリストを記述してください。
matlab - Matlab コピー コンストラクター
1 つの入力でコンストラクターを追加し、そのプロパティを明示的にコピーする以外に、ハンドル派生クラスの matlab のコピー コンストラクターを実装するより良い方法はありますか?
等
ありがとう、ダニ
c++ - オブジェクトの配列を動的に割り当てる
動的に割り当てられた配列を含むクラスがあります。
しかし今、これらのクラスの動的に割り当てられた配列を作成したいと考えています。これが私の現在のコードです:
しかし、これはひどく爆発します。(呼び出しで)作成された新しいA
オブジェクトは、ループの反復が終了すると破棄されるため、これはそのインスタンスの内部が-ed になることを意味します。A(3)
for
myArray
A
delete []
それで、私の構文はひどく間違っているに違いないと思いますか? やり過ぎと思われる修正がいくつかあると思いますが、避けたいと思っています。
- のコピー コンストラクタを作成します
A
。 vector<int>
andを使用vector<A>
するので、これらすべてについて心配する必要はありません。- オブジェクト
arrayOfAs
の配列ではなく、ポインターの配列にします。A
A*
これは、内部動的割り当てを持つものの配列を動的に割り当てようとするときに実際に機能する構文がある初心者向けのものだと思います。
(また、私が C++ を使用してからしばらく経っているので、スタイルの批評も高く評価されています。)
将来の視聴者向けの更新: 以下の回答はすべて非常に役に立ちます。コード例と便利な「4 のルール」により、Martin のコードは受け入れられますが、すべてを読むことを強くお勧めします。何が間違っているかを簡潔に述べた優れたものもあれば、vector
s がどのように、そしてなぜ良い方法なのかを正しく指摘しているものもあります。
c++ - c++ push_back、非 const コピー コンストラクター
両端キューに push_back したいクラスがあります。問題は、プッシュバックするときに元のオブジェクトを変更する必要があるため、非 const コピー ctor が必要なことです。これを実装すると、const コピー ctor が呼び出されます。const ctor を削除すると、使用可能な ctor がないというコンパイル エラーが発生します。渡すときに元の構造体を変更できるようにこれを実装するにはどうすればよいですか? 私はそれを変更する必要があります.bcはスコープ外になるとオブジェクトを破壊します.別のインスタンスがある場合はそうしないように指示したいと思います. プラットフォームがサポートしていないため、ブーストを使用できません。
c++ - コピーコンストラクタと戻り値の最適化
前の質問では、単純な値による戻り関数は常にそのreturn
引数を割り当てられている変数にコピーするように見えました。
これは標準で要求されていますか、それとも関数本体内でも「割り当てられた」変数を作成することで関数を最適化できますか?
visual-studio-2008 - VC2008 の自動ポインター コンストラクター
自動ポインターの実装があります。
Visual C++ 6 では問題なく動作します。ただし、Visual C++ 2005 または 2008 では、関数から自動ポインタを返すことはできません。
例えば
何が起こるかというと、コンパイラは一時的な GAutoString を作成して関数の戻り値を保持し、それをスタック上の変数 'a' に渡す際に一時変数の演算子 T*() を呼び出し、次に GAutoPtr( T *ptr = 0) コンストラクター、コピー コンストラクターを使用する代わりに: GAutoPtr(AutoPtrRef p)
これにより、temp auto ptr がメモリを削除し、'a' が解放されたメモリへのポインタを保持します。
ただし、VC6 では、適切なコンストラクターを呼び出します。これをすべて言っていると、私は Linux と Mac でも gcc を使用しているので、私が書いたコードはそこでも動作する必要があります。VC2008 では、コピー コンストラクターで非 const by value 変数を使用できません。また、とにかく「const」は必要ありません。コピー コンストラクターがメモリ ブロックの所有権を取得し、コピー中のオブジェクトから所有権を削除するため、オブジェクトを変更するためです。
VC 2005/2008 でこれを機能させるにはどうすればよいですか?
c++ - コンストラクターの初期化リストをコピーする
引数なしのコンストラクターで初期化リストからメンバーを除外すると、そのメンバーの既定のコンストラクターが呼び出されることはわかっています。
コピー コンストラクターも同様にメンバーのコピー コンストラクターを呼び出しますか、それとも既定のコンストラクターも呼び出しますか?
c++ - ポインターを使用してコンストラクターをコピーする
クラス内にポインターがある場合、Copy コンストラクターを指定する必要があることを最近発見しました。
それを知るために、次の簡単なコードを作成しました。コンパイルはできますが、コピー コンストラクターの実行時に実行時エラーが発生します。
コピーしたオブジェクトのポインタから値だけをコピーしようとしていますが、同じアドレスを割り当てることは避けています。
それで、ここで何が問題なのですか?
この概念は、オブジェクトから他のオブジェクトにすべての値をコピーする必要がある、多くのポインターを持つ他のクラスに使用します。このコードには最初にコピーが必要なので、コピーの可能性を維持したいと思います (コピー コンストラクターを非公開として非表示にすることはしません)。
さらに、実装する必要がある実際のクラスには 10 個ほどのポインターがあり、時間の経過とともに変化する可能性があります。C++ でディープ コピー コンストラクターを使用する、もう少しスマートな方法はありませんか?...
java - Java にコピー コンストラクターがないのはなぜですか?
Java が C++ のようなコピー コンストラクターをサポートしないのはなぜですか?