码迷,mamicode.com
首页 > 编程语言 > 详细

Effective C++笔记(二):构造/析构/赋值运算

时间:2016-04-16 16:59:23      阅读:155      评论:0      收藏:0      [点我收藏+]

标签:

参考:http://www.cnblogs.com/ronny/p/3740926.html

条款05:了解C++默默编写并调用哪些函数

               如果自定义一个空类的话,会自动生成默认构造函数、拷贝构造函数、拷贝赋值函数、析构函数(再次感觉原文翻译的实在是太啰嗦了!)。

            当成员变量里有const对象或引用类型时,编译器会不能合成默认的拷贝赋值函数;当一个基类把它的拷贝赋值函数定义为private时,它的派生类

      也不能生成默认的拷贝赋值函数,因为它无法完成基类成份的赋值。

条款06:若不想使用编译器自动生成的函数,就该明确拒绝

               如果不想编译器自动生成默认函数,可将相应的成员函数声明为private并且不实现(否则成员函数或友元仍能调用);也可以在基类中实现并私有继承

            C++11中已经摒弃了上述的做法,而是通过删除函数来设定,只需要在对应的函数列表后加=delete即可。

条款07:为多态基类声明virtual析构函数

                当你需要手动的去delete一个指向基类的指针的时候,需要将该基类的析构函数设置为virtual,这样可以让delete时,动态的删除可能的派生类的成员。

             不要无端的给一个没有virtual成员函数的类的析构函数声明为virtual,因为如果要实现virtual函数必须让类携带更多的信息(存储空间)。

             标准的string不含任何virtual函数,所以不要把string定义为某个定义类的基类。类似的情况也发生成STL的其他容器如vector,list,set等上。

             为一个抽像基类(不能定义对象实体)声明一个纯虚函数,而且要为这个纯虚函数要提供一份定义。即如果一个类带有任何一个虚拟函数,则它需要定义

      一个虚拟析构函数。

             并不是多所有基类设计都是为了多态(经base class接口处理derived class对象)用途,因此它们不需要虚拟析构函数。即如果一个类不是基类或不是作为

     多态来使用,就不该声明虚拟析构函数。

 

Effective C++笔记(二):构造/析构/赋值运算

标签:

原文地址:http://www.cnblogs.com/573177885qq/p/5398662.html

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