Effective C++

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

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 class
Thinging 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、数据成员(静态常量除外)

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

posted @ 2018-10-22 17:22  j_shuang  阅读(204)  评论(0编辑  收藏  举报