关于复制控制
来源:互联网 发布:lol for mac 汉化 编辑:程序博客网 时间:2024/06/13 07:44
复制控制包括复制构造函数、赋值操作符和析构函数。
1. 默认情况下,编译器会为我们自动合成默认构造函数、默认复制构造函数、默认赋值操作和析构函数,一旦用户定义了自己的相关函数,则编译器就不会自动合成默认函数。
2. 为了防止被复制,可以将类的复制构造函数声明为private。C++中iostream类就采用了此机制,其copy构造函数和copy assignment操作符被声明为private而且没有定义。
3. 不要再构造函数和析构函数中条用virtual函数。因为在derived class构造时,首先调用base class的构造函数,base class构造期间virtual函数绝对不会下降到derived class阶层,因此调用的仍然是base class的相关函数。同样析构函数中析构函数调用的也是base class的相关函数,即没有实现动态绑定。
4. 处理好“operator=”中的“自我赋值”
class Bitmap {...};
class Widget
{
...
private:
Bitmap *pb;
};
//危险做法
Widget& Widget::operator=(const Widget& rhs)
{
delete pb;
pb = new Bitmap(*rhs.pb);
return *this;
}
//正确做法
Widget& Widget::operator=(const Widget& rhs)
{
if(this == &rhs) return *this; //证同测试
delete pb;
pb = new Bitmap(*rhs.pb);
return *this;
}
5. copy构造函数和copy assignment函数应该确保赋值“对象内的所有成员变量”及“所有base class成分”。
6. 赋值操作符返回对坐操作数的引用,加法操作符返回一个右值(非引用)。
7. 关于深拷贝与浅拷贝。大凡有指针成员的类必须定义自己的复制控制,因为合成的满足不了要求。C++中管理指针成员通常有三种做法:
(1) 采用常规指针型行为。此种做法有缺陷,即所谓的浅拷贝。
(2) 采用“智能指针”行为。指针所指对象是共享的,能够防止悬垂指针。
(3) 采用值型行为。指针所指的对象是唯一的,有每个类对象独立管理,即所谓深拷贝。
- 关于复制控制
- 复制控制
- 复制控制
- 复制控制
- 复制控制
- 复制控制
- 复制控制
- 复制控制
- 复制控制
- C++复制控制
- 13 复制控制 学习
- C++类复制控制
- C++复制控制
- 第十三章 复制控制
- 复制控制和继承
- 第十三章:复制控制
- 复制控制和继承
- C++ 复制控制
- 关于class和struct的区别
- 关于避免多重包含的问题
- 为生活还是为生存,为自己还是为别人
- 关于sizeof的用法
- Oracle表空间常用操作
- 关于复制控制
- 关于操作符重载
- 关于头文件内容的讨论
- 关于const对象的讨论
- 关于size_t, ptrdiff_t, size_type, difference_type
- 关于const_cast, static_cast, dynamic_cast和reinterpret_cast
- emacs解除read-only的buffer锁定
- 微博力是CRM的最后一百米?
- C# 屏蔽系统热键