绝不要在构造函数和析构过程中调用virtual函数
摘要:下面是一个用来塑模股市交易的类: derived的类的构造函数被调用,但是首先得调用基类Transaction的构造函数,但是在后面还得调用virrual函数,这个时候子类的对象的构造还没有完成,那么虚函数也就没有意思,也就可以说虚函数现在还不是虚函数,在derived class对象构造期间,对象的类型还是base类的而不是derived class。不光是virtual函数会被解析为bas...
阅读全文
别让异常逃离析构函数
摘要:c++中并不禁止析构函数吐出异常,但是并鼓励这样做,看下面代码: 当vector v被销毁时,它有责任将其中所有的widgets销毁并且回收内存,而在析构第一个元素时候,析构函数会抛出异常,但是第二个vector的时候也会抛出异常,这对于c++来说太多了。这会导致程序不明确的行为。c++不喜欢析构函数吐出异常。 那么如果你的析构函数必须执行一个动作,而且该动作可能在失败时候抛出异常,怎么办...
阅读全文