放射線作成者
4026 ワード
1.レプリケーションジェネレータとは?
:オブジェクトのコピーを作成するときに呼び出される作成者.
形態
:このようにコンパイラを使用しています.
constは他のオブジェクトの変更を防止できるからです.
リファレンスコピーが表示されないようにします.Object(const Object &other)
{
}
注意事項
:クラスで動的に割り当てられ、無効になっているメンバーポインタ変数を管理する場合は、特に注意してください.
->浅いコピーのため、リファレンスがメモリを解放する問題が発生しました.
いつ呼びますか。
1)関数のパラメータとしてクラスを使用する場合
2) 🥺!!使用してクラスに戻るとき!!
=>一時オブジェクトが生成されるという問題が発生します.
1)パラメータとしてクラスを使用する場合の例
:mnumをテスト関数で7に変更しようとしましたが、変更はありません.
(理由)->テスト関数のパラメータはvalueタイプで、コピーのmnum値ではなくオブジェクトの元のコピーを変更します.そのため、外部での価値は同じです.
(その他の問題)->レプリケーションジェネレータが呼び出されました.Testのパラメータはオブジェクトなので呼び出されます.
Object(const Object &other)
{
}
Call by AddressまたはCall by Referenceに変更します.
->レプリケーションジェネレータは呼び出されません.
-Addressをクリックすると、ポインタのサイズが増加します.
-メモリサイズを増やすことなく、Refでコールします.
パラメータにcontを追加する場合、objのメンバーは変更できません.
2.ジェネレータのコピーと入力演算子のコピー。
a)レプリケーションジェネレータとレプリケーション対入演算子呼び出しの時点が異なる!
1)コピー作成者が宣言しながら他のオブジェクトに初期化する場合.
割り当て演算子ですが、宣言とともに初期化されたため、レプリケーションジェネレータが呼び出されます.
宣言と同時に初期化
私)copyの生成を阻止します。
1)個人に移る.
2)publicに移動し、宣言を削除する
マルチ)copy Elision:コピーをスキップ
:レプリケーションジェネレータを呼び出さない...何だろう.
コンパイラが自動的にレプリケーションをスキップしました.
レプリケーションは行われたが,オブジェクト(6)はRvalueであるため,コンパイラ自身がレプリケーション省略を行った.
ra)戻り値の最適化
デバッグモードとパブリッシュモードは異なります.
->パブリッシュ時に最適化します.
:領域変数を返す必要があるため、コピーが完了すると戻ります.
->コンパイラは消失した値であるため、レプリケーションをスキップして最適化された状態に戻ります.生命の継続です.
Main側のresultオブジェクトがdoSomethingのaオブジェクトになりました!
3.深さ放射と浅い放射
浅い放射
:動的に割り当てられたポインタ間でレプリケーションを行う場合に発生する現象、すなわち、値をレプリケーションするのではなく、アドレスと値にレプリケーションします.
-2つのポインタが同じメモリを指しているのが特徴です.無効な場合は
同じメモリを解放して問題が発生.
ふかほうしゃ
:ポインタをコピーすると、メモリの形式ではなく値がコピーされます.
-ライトコピーのコピーを防止します.2つのポインタは同じメモリではなく、異なるメモリを参照します.
浅いレプリケーションの例
->問題が発生したのは、解放されたメモリを再解放しようとしたためです.
->ポインタなので、ポインタのメモリを確保する必要があります!
->そうすれば、深福薩と言える!
ロ)クラス内の浅いコピーと深いコピー。
作成者をコピーします。
静的に割り当てられた変数については問題ありません.
動的に割り当てられた変数では、同じメモリを解放しようとしたために問題が発生しました.
解決コード
->コピー作成者からメモリを再割り当てし、パラメータとして受信したオブジェクトが指す値を受け入れる
放射対入演算子。
:コピー生成者と同じです.この場合、動的な割り当ては行われず、参照されるメモリの値のみが受け入れられます.
Reference
この問題について(放射線作成者), 我々は、より多くの情報をここで見つけました https://velog.io/@kwt0124/9.11-대입-연산자-오버로딩-깊은-얕은-복사テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol