問題タブ [default-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.

0 投票する
2 に答える
166 参照

c++ - コピー コンストラクターはファイル メンバーを再初期化しますか

私は興味深いケースに出会いました:

クラスのメンバーとしてファイル ストリームがあり、ファイルにデータを書き込む関数があります。オブジェクトは、そのメンバーをパラメーターで初期化する別のクラスにパラメーターとして渡されます。このためにいくつかの問題がありましたが、文字列のベクトルとそれに行を追加することでそれらを解決することができました。しかし、今でもあるクラスから別のクラスにオブジェクトを渡していることがわかりました。

これが私が持っているものの例です:




foo()そして、C オブジェクトを作成してそのメソッドを呼び出す関数があります。

ここで何が起こっているのかよくわかりません。オブストリームは複数回作成されていますか? 一度だけ作成されてから、再び開かれますか? すべてのデストラクタにoFile.close()関数を追加するようにアドバイスしていただけますか? ベクトルのみをパラメーターとして渡し、関数内で ofstream を使用しbar()ますか?

0 投票する
1 に答える
625 参照

c++ - コピーコンストラクターとリンクエラー

このスニペット コードを見てみましょう:

このクラスのオブジェクトを次の方法で作成すると:

これはデフォルトのコピー コンストラクターを呼び出し、自動的に mc2.m_num = mc1.m_num ? を割り当てます。また、クラス内に次のようにインスタンスを作成する呼び出しがある場合:

これは、mc2 と同じようにデフォルトのコピー コンストラクターを呼び出します。 *これは、オブジェクト自体をコピーするだけです。

私が抱えている 2 番目の問題は、Microsoft Visual Studio 2013 でコードをコンパイルすることです。String クラスを作成しましたが、コンパイルしようとすると、何らかの理由で関数が既に定義されていることを示す多くのリンク エラーが発生します。文字列.h:

};

文字列.cpp:

コードファイル:

エラー:

0 投票する
2 に答える
174 参照

c++ - C++ の暗黙的なコピー コンストラクターをインターセプトするか、その機能を呼び出す

与えられた:

...ここで、「もの」はプロパティの任意のセットです。(アイデアは、そのクラスのインスタンスのカウンターを持つことです)

それで:

自動コピー コンストラクターが呼び出されるため、これをカウントし損ないます。

自動的に作成された新しいインスタンスを反映するカウンターを維持する方法はありますか? 明示的なコピー コンストラクターを実装すると、すべてのプロパティを 1 つずつ割り当てる必要があります。ただし、メンバーごとの浅いコピーが必要です。ディープ コピーを実行する必要がないため、明示的なコピー コンストラクターを実装するのは多くの不要な作業のように思えます。

0 投票する
1 に答える
209 参照

c++ - ミューテックスで明示的に定義する必要があるコピー コンストラクター

私のコードでは、Complex および Composition クラスのコピー コンストラクターを意図的に定義していません。コンパイラから提供されたコピー コンストラクタを使用したい

上記のコードは問題なくコンパイルされます。

次に、複雑なクラスを次のように変更します

コードをコンパイルすると、エラーが発生します

コンポジションで独自のコピー コンストラクターを空のボディで定義することで、この問題を解決しました。

ただし、あるケースでは独自のコピー コンストラクターを作成する必要があり、別のケースではコンパイラーが生成したコピー コンストラクターを使用できた理由はまだわかりません。もちろん、犯人はミューテックスです。この問題を引き起こしているのは、ミューテックスのコピーできないプロパティですか、それとも私が見逃しているものですか?

0 投票する
2 に答える
66 参照

c++ - 共有メモリを管理できるだけの元のオブジェクトを記憶する

良い C++ スタイルについて質問があります。メンバとして 1 つまたはいくつかのポインタを持つクラス "MyClass" を書きたいのですが、MyClass はこのポインタにメモリを割り当てることができます。暗黙的な Give default-copy-constructor (および default-assignment-operator) を使用して MyClass のインスタンスをコピーし、ポインターのみがコピーされ、新しいオブジェクトが初期オブジェクトが持つデータを共有するようにしたいと考えています。割り当てられます。

私の考えは、コピーされたオブジェクト (コピー コンストラクターまたは代入演算子で作成されたもの) がメモリを解放する (およびメンバー ポインターにメモリを割り当てる) ことを禁止することでした。コピーされたオブジェクトと元のオブジェクト (コンストラクターによって作成された) を区別するために、次のコードを使用します。

このソリューション ( this-pointer との比較を使用) は、そのような目的 (たとえば、値による呼び出しによるオブジェクトの解析) に適したスタイルでしょうか?それともリスクがありますか? もちろん、元のオブジェクトはコピーされたオブジェクトよりも常に長生きすると思います。

ありがとうございました!