发布时间:2012-12-22 20:35:49
重载的赋值运算符返回引用类型的*this,复合运算符 += 及类似的也是如此。可以写出 X=Y=Z=17类似的代码。......【阅读全文】
发布时间:2012-12-21 23:10:53
构造函数和析构中不要调用虚函数。虚函数的作用就是为了派生类可以重写(redefine),实现不同的要求。在一个派生类对象的构造过程中,首先基类的部分先被构造,如果在基类构造函数调用一个虚函数,由于此时编译器只能看到基类对象,故会触发基类的版本,可能会导致预想外的场景。同理析构也是如此(可能析构更容易忽略)。基类中如果一定要有此“虚”的意味,可以通过传入参数或使用静态成员来实现。......【阅读全文】
发布时间: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成员。......【阅读全文】