Effective C++

it2025-01-18  15

在对象创建的时候调用构造函数,在对象销毁的时候调用析构函数

1、以对象管理资源

2、如果你打算在一个内含"reference 成员"的class内支持赋值操作,你必须自己定义copy assignment操作符。(内含const 成员的class 也是如此)

3、析构函数绝对不要吐出异常,如果一个被析构函数调用的函数有可能突出异常,析构函数应该捕捉任何异常,然后吞下他们(不传播)或结束程序。

4、令operator= 返回一个reference to *this;

5、尽量以pass-by-reference-to-const 代替 pass-by-value(前者更为高效);对于内置类型:使用pass-by-value更为安全。

6、绝不要返回pointer或reference指向一个local stack对象,(或返回reference指向一个heap-allocated对象,或返回pointer或reference 指向一个local static 对象)而有可能同时需要多个这样的对象。

19、new type like classThinging of this: 新type的对象应该如何被创建和销毁? 对象的初始化和对象的赋值应该有什么样的差别? 新type如果被passed-by-value(以值传递),意味着什么? 什么是新type的合法值? 你的心type需要配合某个继承图系? 你的新type需要什么样的转换? 什么样的操作符和函数对此新type而言是合理的? 什么样的标准函数应该驳回? 谁该取用新type的成员? 什么是新type的未声明接口? 你的新type有多么一般化?

可使用using 声明式或inline转交函数。(using Base::fun1;或 Base::fun1())

24、若你需要某个函数的所有参数进行类型转换(包括this指针所指的隐喻参数),那这个函数必须是non-member.

36、绝不重新定义继承而来的 non-virtual 函数。

37、绝对不要重新定义一个继承而来的缺省参数值,因为缺省参数值都是静态绑定,而virtual函数(唯一该覆写的)却是动态绑定。

43、请使用关键字typename标识嵌套从属类型名称;但不得在base class lists(基类列)或 member initialization list(成员初始列)内以typename作为base class 修饰符。

44、因参数类型(type parameters)而造成的代码膨胀,往往可降低,做法是让带有完全相同二进制表述的具现类型(instantiation types)共享实现码

5中迭代器分类:Input 迭代器 Output 迭代器 forward 迭代器 Bidrectional 迭代器 random access 迭代器

/* 带有stl容器成员的结构体,不能使用memset等进行初始化, 会破坏容器的内部链,从而不能进行迭代器遍历操作*/

/******************************************************/

1、类型定义(typedef)和枚举(enum) 2、常量(const static 数据成员) 3、构造函数 4、析构函数 5、类方法(包括静态方法) 6、数据成员(静态常量除外)

/******************************************************/

转载于:https://www.cnblogs.com/shuang0109/p/9831300.html

相关资源:Effective.Modern.C++中文版本
最新回复(0)