...如果不定义复制构造函数的话,系统是不是自己定义默认的复制构造函数...

发布网友 发布时间: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& );

如果两者都没有定义,系统会生成两个,但是,如果你定义了一个,那么两个默认函数都不会再生成。
另外:如果涉及到深拷贝,你得自己定义,也就是对于类中的指针处理问题。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com