有关C++类中的默认实现:拷贝构造函数和赋值运算符

时间:2021-06-17 19:25:29
我想问一下,如果一个类没有自己写的拷贝构造函数,那么编译器的默认拷贝构造函数的函数体也是空的么?
另外,如果没有重载赋值运算符,那么编译器默认的赋值运算符的原理是怎样的?
如果没有重载赋值运算符,但是类中的数据成员又有指针,那么在使用默认的赋值运算符是不是危险的?
求各位指教.

4 个解决方案

#1


不是空的,只是实现默认的构造。至于默认的构造就看该类里面的数据成员的默认构造是什么了。
默认的赋值操作符是实现按位拷贝。就是把A里面的内容按照数据位复制给B里面的内容

#2


如果没有重载赋值运算符,但是类中的数据成员又有指针,那么在使用默认的赋值运算符是不是危险的?

>>虽说不绝对,但通常都是危险的。

#3


引用 1 楼  的回复:
不是空的,只是实现默认的构造。至于默认的构造就看该类里面的数据成员的默认构造是什么了。
默认的赋值操作符是实现按位拷贝。就是把A里面的内容按照数据位复制给B里面的内容

“按位”不准确,应该是按成员拷贝。如果某个成员的类有自己的拷贝那么会调用到。

#4


有关C++类中的默认实现:拷贝构造函数和赋值运算符深入探索C++对象模型 第二章

#1


不是空的,只是实现默认的构造。至于默认的构造就看该类里面的数据成员的默认构造是什么了。
默认的赋值操作符是实现按位拷贝。就是把A里面的内容按照数据位复制给B里面的内容

#2


如果没有重载赋值运算符,但是类中的数据成员又有指针,那么在使用默认的赋值运算符是不是危险的?

>>虽说不绝对,但通常都是危险的。

#3


引用 1 楼  的回复:
不是空的,只是实现默认的构造。至于默认的构造就看该类里面的数据成员的默认构造是什么了。
默认的赋值操作符是实现按位拷贝。就是把A里面的内容按照数据位复制给B里面的内容

“按位”不准确,应该是按成员拷贝。如果某个成员的类有自己的拷贝那么会调用到。

#4


有关C++类中的默认实现:拷贝构造函数和赋值运算符深入探索C++对象模型 第二章