class Uncopyable{ private: Uncopyable(const Uncopyable&); Uncopyable& operator=(const Uncopyable&); } //作为基类继承即可
class AbstractClass { public: virtual ~AbstractClass(); } AbstractClass::~AbstractClass() { //函数实现 //目的是进行资源释放 }
class DBConn { private: DBConnect dbc; bool closed; public: void close() { dbc.close(); closed = true; } ~DBConn() { if(!closed) { try { dbc.close(); } catch(...) { //停止或记录 } } } } //解决close会跑出异常的可能
- 看清楚描述,是构造函数和析构函数中不能调用虚函数;析构函数本身是可以设计成虚函数的,且在某些情况下,必须设计成虚函数
- 在构造函数未执行完成之前,类的虚函数表未建立
- 进入析构函数之前,类的虚函数表已经销毁,无法调用
好处:便于连续赋值,类似下面这种执行方式:
a = b = c = d //连续赋值
class Widget { public: Widget& operator+=(const Widget& rhs) { return *this; } }