码迷,mamicode.com
首页 > 其他好文 > 详细

类拓展——拷贝控制成员

时间:2017-11-12 00:31:09      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:没有   类对象   默认值   因此   初始化列表   定义类   默认   运算符   第一个   

一、拷贝控制操作之于类

作用:定义类对象拷贝、移动、赋值或销毁时做什么

没有定义:编译器会为我们定义,但合成版本的行为可能并非我们所想

二、拷贝构造函数

1. 每个成员的类型决定了它如何拷贝

  类类型的成员,会使用其拷贝构造函数来拷贝;内置类型的成员则直接拷贝。

  对于数组,合成拷贝构造函数会逐元素地拷贝一个数组类型的成员。

2. 细节

第一个参数是自身类类型的引用,且任何额外参数都有默认值

通常不应该是explicit的,因为它经常会被隐式地使用

即使定义了拷贝构造函数,编译器也会生成合成版本

三、拷贝赋值运算符

1. 工作过程

将右侧运算对象的每个非static成员了赋予左侧运算对象的对应成员,这通过成员类型的拷贝赋值运算符来完成。

2. 细节

类未定义自己的拷贝赋值运算符,编译器会为它合成一个

合成版本返回一个指向其左侧运算对象的引用

四、析构函数

1. 工作过程

析构函数有一个函数体和一个析构部分,在一个析构函数中,首先执行函数体,然后销毁成员。

在一个析构函数中,不存在类似构造函数中初始化列表的东西来控制成员如何销毁,析构部分是隐式的。

如一个合成版本的空析构函数体执行完毕后,成员在隐含的析构阶段中被销毁,如销毁string成员时会调用string的析构函数来释放其所占内存。

2. 成员销毁时发生什么完全依赖于成员的类型

类类型的成员在销毁时,执行成员自己的析构函数;内置类型没有析构函数,因此销毁内置类型什么也不需要做。

故隐式销毁一个内置指针类型的成员不会delete它所指向的对象。

3. 细节

类未定义自己的析构函数时,编译器会为它合成一个

 

类拓展——拷贝控制成员

标签:没有   类对象   默认值   因此   初始化列表   定义类   默认   运算符   第一个   

原文地址:http://www.cnblogs.com/xzxl/p/7820450.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!