cpp におけるコンストラクト/デストラクトについてまとめる
コピーコンストラクタ/コピー代入演算子について
コピーコンストラクタ: オブジェクトを「同じ型の別のオブジェクト」で初期化するときに使われる。
コピー代入演算子: オブジェクトを「同じ型の別のオブジェクト」で代入するときに使われる。
メンバ変数間で何を共有するか、どう使うかについては検討が必要
#include <iostream>
class Widget {
public:
explicit Widget(int a) { std::cout << "コンストラクタ" << std::endl; };
Widget(const Widget& rhs) { std::cout << "コピーコンストラクタ" << std::endl; };
Widget& operator=(const Widget& rhs) {
std::cout << "コピー代入演算子" << std::endl;
return *this;
};
~Widget(){};
};
int main(int argc, char* argv[]) {
std::cout << argv[0] << std::endl;
Widget a(1); // コンストラクタ
std::cout << "代入前(代入前後でポインタは変わらない) "<< std::endl;
std::cout << "aのアドレス : " << &a << std::endl;
Widget b(a); // コピーコンストラクタ
a = b; // コピー代入演算子
Widget c = b; // コピーコンストラクタ
std::cout << "aのアドレス : " << &a << std::endl;
std::cout << "bのアドレス : " << &b << std::endl;
std::cout << "コピーコンストラクタ(bと同じポインタになるわけではない) "<< std::endl;
std::cout << "cのアドレス : " << &c << std::endl;
}
(base)root@ubuntu:~/workspace/MyUtils/Clang/src/etc# ./copyConstruct.out
./copyConstruct.out
コンストラクタ
代入前(代入前後でポインタは変わらない)
aのアドレス : 0x7ffdf60d72d5
コピーコンストラクタ
コピー代入演算子
コピーコンストラクタ
aのアドレス : 0x7ffdf60d72d5
bのアドレス : 0x7ffdf60d72d6
コピーコンストラクタ(bと同じポインタになるわけではない)
cのアドレス : 0x7ffdf60d72d7