C++ primer读书笔记7-复制控制
来源:互联网 发布:文化部网络动漫黑名单 编辑:程序博客网 时间:2024/06/06 06:29
1 复制构造函数,赋值操作符,析构函数
这三者都是编译器会自动提供的函数,其中复制构造函数,赋值操作符是如果你没有自己编写,那么编译器就会提供。析构函数是不
管自己有没有实现,编译器都会提供一个合成构造函数,在释放对象的时候会先调用自己编写的构造函数,然后调用编译器合成的构
造函数。
2 IO类型的类没有复制构造函数
3 形参为非引用类型时候,函数的返回类型是非引用类型时候,这个时候都要用到复制构造函数。
4 初始化容器元素
vector<string> strs(4);
这样会先调用默认构造函数产生一个string对象,然后利用复制构造函数去初始化剩余的。
5 初始化数组元素
<1>如果没有为类类型数组提供元素初始化式,那么将会采用默认构造函数来初始化每个元素
<2>如果有用常会的花括号的数组初始化列表来提供显式的元素初始化式,则采用复制构造函数
6 合成复制构造函数
<1>合成复制构造函数直接复制内置类型的成员值
<2>类类型成员使用该类的复制构造函数来进行复制
<3>数组成员则将复制数组的每一个元素
7 禁止复制
<1>为了防止复制,类必须显式的声明其复制构造函数为private
<2>为了友元和成员进行复制,可以只声明私有复制构造函数,但是不去实现它
8 赋值操作符
赋值是2元运算,所以必须有两个形参,一个是对应的左操作数,一个是对应的右操作数。当操作符成为成员函数的时候,第一个操
作数被隐式的绑定到this指针。
9 关于赋值操作符的返回值
至于为什么会用到函数的返回值,这个其实很简单,有时候我们会遇到 a = b = c,这个时候 先执行 b = c会返回同类型的值,这
个时候就可以继续把值赋给a了。
A& operator = (A& right)
{
this.x = right.x;
//...
return *this;
}
10 析构函数使用的时候
<1> 撤销类对象的时候会自动调用
<2> 动态分配的对象,只有在指向该对象的指针被删除的 时候
<3> 容器中的元素,首先撤销小标为size()-1的元素,最后撤销小标是0的元素。
11 合成析构函数
不管有没有自己去写析构函数,系统都会为我们生成一个合成的构造函数。最后在释放对象的时候,先是执行自己写的构造函数,最
后执行合成构造函数。
12 关于智能指针
当几个类共享同一个内存区域时,可以采用智能指针来管理内存的释放。
class U_Ptr
{
friend class HasPtr
int *ip;
size_t use;
U_Ptr(int *p):ip(p),use(1){}
~U_Ptr{delete ip}
};
这三者都是编译器会自动提供的函数,其中复制构造函数,赋值操作符是如果你没有自己编写,那么编译器就会提供。析构函数是不
管自己有没有实现,编译器都会提供一个合成构造函数,在释放对象的时候会先调用自己编写的构造函数,然后调用编译器合成的构
造函数。
2 IO类型的类没有复制构造函数
3 形参为非引用类型时候,函数的返回类型是非引用类型时候,这个时候都要用到复制构造函数。
4 初始化容器元素
vector<string> strs(4);
这样会先调用默认构造函数产生一个string对象,然后利用复制构造函数去初始化剩余的。
5 初始化数组元素
<1>如果没有为类类型数组提供元素初始化式,那么将会采用默认构造函数来初始化每个元素
<2>如果有用常会的花括号的数组初始化列表来提供显式的元素初始化式,则采用复制构造函数
6 合成复制构造函数
<1>合成复制构造函数直接复制内置类型的成员值
<2>类类型成员使用该类的复制构造函数来进行复制
<3>数组成员则将复制数组的每一个元素
7 禁止复制
<1>为了防止复制,类必须显式的声明其复制构造函数为private
<2>为了友元和成员进行复制,可以只声明私有复制构造函数,但是不去实现它
8 赋值操作符
赋值是2元运算,所以必须有两个形参,一个是对应的左操作数,一个是对应的右操作数。当操作符成为成员函数的时候,第一个操
作数被隐式的绑定到this指针。
9 关于赋值操作符的返回值
至于为什么会用到函数的返回值,这个其实很简单,有时候我们会遇到 a = b = c,这个时候 先执行 b = c会返回同类型的值,这
个时候就可以继续把值赋给a了。
A& operator = (A& right)
{
this.x = right.x;
//...
return *this;
}
10 析构函数使用的时候
<1> 撤销类对象的时候会自动调用
<2> 动态分配的对象,只有在指向该对象的指针被删除的 时候
<3> 容器中的元素,首先撤销小标为size()-1的元素,最后撤销小标是0的元素。
11 合成析构函数
不管有没有自己去写析构函数,系统都会为我们生成一个合成的构造函数。最后在释放对象的时候,先是执行自己写的构造函数,最
后执行合成构造函数。
12 关于智能指针
当几个类共享同一个内存区域时,可以采用智能指针来管理内存的释放。
class U_Ptr
{
friend class HasPtr
int *ip;
size_t use;
U_Ptr(int *p):ip(p),use(1){}
~U_Ptr{delete ip}
};
0 0
- 《c++primer》读书笔记二 复制控制
- C++ primer读书笔记7-复制控制
- 《C++Primer》 3.14 复制控制
- c++Primer,十三,复制控制
- c++ primer读书笔记-第十三章 复制控制
- c++primer 复制控制-消息处理示例
- 复制控制(学习<C++Primer>)
- c++primer读书笔记(7)
- [C/C++] 第13章 复制控制 primer
- [C++ Primer] 复制控制
- C++ Primer 复制控制
- 《C++Primer》读书笔记——第13章 拷贝控制
- C-PRIMER PLUS读书笔记
- C-PRIMER PLUS读书笔记
- C++Primer读书笔记(一)
- C Primer Plus 读书笔记
- C++Primer读书笔记(二)
- 写写C++Primer读书笔记
- [连载]C#程序设计(11)--- 接口
- 整数快速幂hdu(1852)
- Uni2D 入门 -- Skeletal Animation + Asset Table
- ACTF2014exploit100 餐前甜点
- [字符串]CH Round#30 T1 语言识别
- C++ primer读书笔记7-复制控制
- 【JAVA学习】hashcode()和equals()方法剖析
- Java设计模式之从[Dota的武器创建]分析生成器(Builder)模式
- USACO-cha1-sec1.1 Greedy Gift Givers
- 内网IP和公网IP的区别
- Android记事本开发之界面设计
- 查看人人网非好友的状态
- 能让你成为更优秀程序员的10个C语言资源
- 单片机复习笔记005 -- DS1302时钟芯片