博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++ primer 第十三章
阅读量:4036 次
发布时间:2019-05-24

本文共 1057 字,大约阅读时间需要 3 分钟。

1. 复制构造函数是一种特殊的构造函数,具有单个形参,该形参是对该类类型的引用。当定义一个新对象并用一个同类型的对象对它初始化时,将显式使用复式构造函数。当将该类型的对象传递给函数或从函数范围该类型的对象时,将隐式使用复制构造函数。

 

2. 【复制初始化】总是调用复制构造函数。复制初始化首先使用指定构造函数创建一个临时对象,然后用复制构造函数将那个临时对象复制到正在创建的对象。

当函数形参或者返回值为类类型时,由复制构造函数进行复制。

 

3. 对于容器,如果元素是类类型,在使用只提供容量的容器初始化函数时,如 vector<string> vec(5);编译器先用类默认构造函数创建临时对象,然后用复制初始化函数将临时值复制到各个元素。

 

对于数组,如果没有为类类型的数组提供元素初始化式,啧将用默认初始化函数初始化各个元素。

 

4. 如果没有定义复制构造函数,编译器会自动合成一个。合成复制构造函数将对除了static成员外的每个成员进行复制。对内置类型成员,直接复制值;对类类型成员,调用该类复制构造函数复制;对于数组成员,将复制数组的每一个元素。

 

5. 如果想要防止复制,需要显式声明其复制构造函数为private。通过声明但不定义复制构造函数,可以禁止任何复制类类型对象的尝试。

不允许复制的类对象只能作为引用传递给函数或者从函数返回,也不能用作容器的元素。

 

6. 如果定义了复制构造函数,则必须定义默认构造函数。

 

7. 动态分配的对象只有在指向该对象的指针被删除时才撤销。如果没有删除该指针,啧不会运行该对象的析构函数,对象会一直存在,造成内存泄露。而且对象内部使用的任何资源也不会释放。

 

8. 撤销一个容器(包括数组)时,会运行容器中的类类型的析构函数,容器中的元素是按逆序撤销的。

 

9. 三法则: 如果类需要析构函数,则它也需要赋值操作符和复制构造函数,这三个复制控制成员同时被需要。

 

10. 不管是否自己定义析构函数,编译器总会为我们合成一个析构函数。和程析构函数并不删除指针成员所指向的对象。所以如果有这类对象,我们需要自己析构。

 

11. 智能指针:就是把指针包装成一个类,包含一个整数值计数器,来表示有多少对象共享同一指针。当计数器为0时,才可以删除指向的对象。这是一种避免类中的指针成员成为悬垂指针的方法。

 

12. 另一种防止悬垂指针的方法是,在进行赋值或者复制操作时,对于指针类型,不改变指针所指的对象,而是改变指针所指向对象的值。这样就能保证每个指针都是指向唯一一个对象,析构时可直接删除。

转载地址:http://kwbdi.baihongyu.com/

你可能感兴趣的文章
linux不同模块completion通信
查看>>
linux printf获得时间戳
查看>>
C语言位扩展
查看>>
linux dump_backtrace
查看>>
linux irqdebug
查看>>
git 常用命令
查看>>
linux位操作API
查看>>
uboot.lds文件分析
查看>>
uboot start.s文件分析
查看>>
没有路由器的情况下,开发板,虚拟机Ubuntu,win10主机,三者也可以ping通
查看>>
本地服务方式搭建etcd集群
查看>>
安装k8s Master高可用集群
查看>>
忽略图片透明区域的事件(Flex)
查看>>
忽略图片透明区域的事件(Flex)
查看>>
AS3 Flex基础知识100条
查看>>
Flex动态获取flash资源库文件
查看>>
flex中设置Label标签文字的自动换行
查看>>
Flex 中的元数据标签
查看>>
flex4 中创建自定义弹出窗口
查看>>
01Java基础语法-11. 数据类型之间的转换
查看>>