class のディープ コピーを実行しようとしていますB
が、 A が設定されません。
b3->print
ではなくガベージ番号を返すのはなぜ1
ですか?
私が理解していることから、 b2 と b3 は両方とも同じ A オブジェクトを指しています。しかし、B のコピー コンストラクターを使用してヒープ上に新しいオブジェクトを作成しました。では、なぜ彼らはまだ同じオブジェクトを指しているのですか?
これが理にかなっていることを願っています。
#include <cstdlib>
#include <iostream>
using namespace std;
class A{
int num;
public:
A(int n):num(n){ cout<< "A "<< num << " constructor" <<endl;}
~A(){ cout<< "A "<< num <<" destructor. " <<endl; }
int print(){
cout<< num<< endl;
}
};
class B{
A *a;
int num;
public:
B(int n):num(n){
a = new A(n);
cout<< "B "<< num <<" constructor" <<endl;
}
~B(){
delete a;
cout<< "B "<< num <<" destructor"<<endl;
}
// Copy contructor
B(const B & b): a(new A(b.num)){
}
<strike>int<\strike> void print(){
cout<< num << endl;
}
int get_num(){
return num;
}
};
int main(int argc, char *argv[])
{
B *b2 = new B(1);
B *b3(b2);
b2->print();
delete b2;
b3->print();
system("PAUSE");
return EXIT_SUCCESS;
}