[熱血C+]Chapter 5
C++スタイルの初期化
int num(20); // int num=20; 으로 작성해도 묵시적 변환이 이루어진다
エラーコピー作成者
SimpleClass(const SimpleClass ©) : num1(copy.num1), num2(copy.num2) { }
explicit
このキーワードを使用すると、代入演算子を使用してジェネレータを呼び出すことはできません(暗黙的な変換をブロックします).
explicit SimpleClass(const SimpleClass ©) : num1(copy.num1), num2(copy.num2) { }
// SimpleClass sim1(10,20);
// SimpleClass sim2=sim1; (X)
// SimpleClass sim2(sim1); (O)
Shallow Copy & Deep Copy
この場合、メンバー間でBag 1にコピーすると、同じアドレスへの2つのポインタ(Shallow Copy)が生成されます.
ここでBag 1のポインタに対してdeleteを呼び出すと、Bag 2は有効な値を持たない
これを防ぐために,ポインタ参照にコピーしたターゲットをDeep Copyと呼ぶ.
// Deep Copy 코드 예시
Person(const Person& copy)
{
name = new char[strlen(copy.name)+1];
strcpy(name, copy.name);
}
レプリケーションジェネレータを呼び出すタイミング
メモリ割り当てと同時に初期化を行います。
クラスの外部からオブジェクトにアクセスするために必要な
一時オブジェクト
したがって、
const Temporary &ref = Temporary(300);
class SoSimple { .... };
SoSimple SimpleFuncObj(SoSimple ob)
{
cout<< "Parameter ob 생성" << endl;
return ob;
}
int main(void)
{
SoSimple obj;
So Simple tempRef = SimpleFuncObj(obj); // 생성자 호출 (x)
return 0;
}
Reference
この問題について([熱血C+]Chapter 5), 我々は、より多くの情報をここで見つけました https://velog.io/@dch3000/열혈-C-Chapter-5テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol