直接上问题
test::test(){ cout<<"构造函数"<<endl;}test::~test(){ cout<<"析构函数"<<endl;}void test::show() const{ cout<<" x= "<<x<<endl; cout<<" y= "<<y<<endl;}void test::Create(int a, int b){ x=a; y=b;}
int main(){ test a; const test b=a;//这里不是复制了对象a吗?b不需要内存来装入a对象的数据?为什么在这不调用构造函数呢? a.Create(4,5); a.show(); b.show();//怎么这里调用show的方法却显示的x,y为乱码(也就是随即值)? return 0;}//这里为什么只要一次构造而需要二次析构呢?不明白,忘大家指点一下。
int main(){ test a; const test b=a;//由于你没实现拷贝构造函数,会调用默认拷贝构造。 a.Create(4,5); a.show(); b.show();//b是a的拷贝,b中的x,y 没初始化。 return 0;}//一次构造的是test a产生,两次析构是return的时候,分别析构a,和b。
[解决办法]
const test b = a 此时等价 const test b(a); 调用缺省的拷贝构造函数来初始化。
为防隐式调用 用explicit关键字;
由于b是a拷贝来的副本,而初始化时x,y未获得初值,所以你懂得...