...如果不定义复制构造函数的话,系统是不是自己定义默认的复制构造函数...
发布网友
发布时间:2024-10-24 04:00
我来回答
共3个回答
热心网友
时间:2024-11-09 10:01
系统会自动生成的函数有:
默认构造函数
析构函数
拷贝构造函数
赋值运算符(operator=)
取址运算符(operator&)(一对,一个非const的,一个const的)
如果你没有定义复制构造函数,系统会为你生成一个默认的复制构造函数,但是,当你的类含有指针类型的私有数据成员时,默认的复制构造函数是危险的,因为它使两个对象的指针都指向了同一块内存区域,这时便是浅拷贝了。当你含有指针类型的私有数据成员时,必须得使用深拷贝。
你可以搜一下关于浅拷贝和深拷贝的区别。
热心网友
时间:2024-11-09 09:56
正如你理解的,如果你没有定义复制构造函数,系统会为你生成一个默认的复制构造函数,但这并不总是好事,当你的类含有指针类型的私有数据成员时,默认的复制构造函数是危险的,因为它使两个对象的指针都指向了同一块内存区域。
热心网友
时间:2024-11-09 10:01
是的,系统对自动生成默认赋值函数和默认拷贝构造函数
赋值函数声明:A& operaotr = (A&);
拷贝构造函数:A& A( A& );
如果两者都没有定义,系统会生成两个,但是,如果你定义了一个,那么两个默认函数都不会再生成。
另外:如果涉及到深拷贝,你得自己定义,也就是对于类中的指针处理问题。