发布时间:2012-12-21 22:23:20
析构函数中遇到异常可能会导致程序异常,进而发生内存泄露。析构函数不应该抛出(emit)异常,如果析构函数调用的某函数会抛出异常,则应该对其捕获处理或终止程序。(swallow them or terminate the program.)如果用户需要对异常进行处理,则应该提供对应的普通成员函数给用户,而不是直接在析构中处理。......【阅读全文】
发布时间:2012-12-21 12:20:52
上个item提到了编译器会默认合成一些copy control函数和运算符,如果不想对外提供这些功能时,可以把这些声明为private,或者搞一个这些全为private的基类,再派生。再次强调:编译器合成出来的全是public成员。......【阅读全文】
发布时间:2012-12-19 11:00:02
编译器会自动为类 generate/synthesize出:default构造函数,析构函数,赋值运算符,拷贝构造函数。要结合后面几个item综合来看。......【阅读全文】
发布时间:2012-12-19 10:37:43
C++中对于对象初始化有着严格的顺序,先基类再派生类。确保变量/对象作为右值使用前已经完成初始化(initialized),否则会导致杯具。在构造函数中使用冒号初始化列表优于在函数体中赋值。当涉及到静态变量时,不同编译单元(translation unit,通常理解为文件)中的初始化顺序并无明确保障。当存在一个文件中的静态变量需要用另外文件中的静态变量赋值时,如何保障后者已先被初始化,这时考虑将后者变为 local static 变量,想象C++中的单例模式。class FileSystem { ... }; &......【阅读全文】