C++为什么需要定义自己的复制构造函数
2012-02-03 23:45
190 查看
如果类只包含类类型成员和内置类型的成员,则可以不用显示定义复制构造函数。但如果类中包含有指针或者有分配其他类型资源时就必须重新定义复制构造函数。因为类中有指针成员,当把用一个对象初始化另一个对象时,这时两个对象中的指针都指向同一段内存,这时如果其中一个对象被消毁了,这时对象中指针所指向的内存也同样被消毁,但另一个对象确不知道这种情况,这时就会出现问题。比如hyong类中含有一个成员指针p,当声明了hyong
x=y其中y也是hyong类的对象,这时对象x和y中的指针成员p都指向同一段内存,而如果y被消毁,但x还没被消毁时就会出问题,这时y中对象的成员指针p已经释放了该内存资源,而x中的成员指针p还不知道已经释放了该资源,这时就会出问题。因为对象x和y中的成员指针共享同一段内存,所以对y中的成员指针p的修改就会影响到对象x中的成员指针。所有这些情况都需要重定义复制构造函数来显示的初始化成员的值,这种初始化方式也被称为深度复制。
x=y其中y也是hyong类的对象,这时对象x和y中的指针成员p都指向同一段内存,而如果y被消毁,但x还没被消毁时就会出问题,这时y中对象的成员指针p已经释放了该内存资源,而x中的成员指针p还不知道已经释放了该资源,这时就会出问题。因为对象x和y中的成员指针共享同一段内存,所以对y中的成员指针p的修改就会影响到对象x中的成员指针。所有这些情况都需要重定义复制构造函数来显示的初始化成员的值,这种初始化方式也被称为深度复制。
相关文章推荐
- C++为什么需要定义自己的复制构造函数
- C/C++ 什么时候需要定义拷贝构造函数
- 雷军:为什么马云马化腾创业那么容易成功 自己却需要煎熬数年
- C++中定义派生类之前需要看到基类的定义实体
- C/C++——为什么类的静态成员函数在定义的时候不写static?
- C++中有了malloc/free,为什么还需要new/delete?
- 为什么需要将继承层次中类的析构函数定义成virtual的?
- C++类内为什么不能定义非const的static成员(待续)
- Effective C++第七章-模板和泛型编程之需要类型转换时请为模板定义非成员函数
- 【c++】为什么类的定义中不能包含其自身类型,但是能包含其自身的指针或引用类型
- 为什么中国需要自己的数据库?
- 为什么在C++中需要虚函数
- 需要定义一个变量数组,但是C++ 数组无法用变量初始化,解决方案
- C++:什么情况下需要将析构函数定义为虚函数?
- 类定义下标操作符时,为什么需要定义两个版本
- C++之需要类型转换时请为模板定义非成员函数(46)---《Effective C++》
- 雷军:为什么马云马化腾创业那么容易成功 自己却需要煎熬数年
- C++中为什么需要将new对象通过独立语句置入智能指针
- C++中定义自己的头文件
- 雷军:为什么马云马化腾创业那么容易成功 自己却需要煎熬数年 (ZZ)