2013年5月9日
摘要: 1)当调用derived class的构造函数时,其基类的构造函数会先执行,在此期间,对象的类型被认为是base class对象,派生类对象成员变量处于未初始化状态,virtual调用不会下降至派生类中。2)当调用derived class析构函数时,其基类的析构函数先被调用,同理,在此期间的类型是base class对象,派生类成分处于未定义状态,C++视它们仿佛不存在,其他成员也同样这么看待,所以virtual函数不会下降至派生类中执行。 阅读全文
posted @ 2013-05-09 20:49 Sophia-呵呵小猪 阅读(136) 评论(0) 推荐(0) 编辑
摘要: 1、构造函数可以抛出异常,但最好不要。2、c++标准指明析构函数不能、也不应该抛出异常。more effective c++关于第2点提出两点理由:1)如果析构函数抛出异常,则异常点之后的程序不会执行,如果析构函数在异常点之后执行了某些必要的动作比如释放某些资源,则这些动作不会执行,会造成诸如资源泄漏的问题。2)通常异常发生时,c++的机制会调用已经构造对象的析构函数来释放资源,此时若析构函数本身也抛出异常,则前一个异常尚未处理,又有新的异常,会造成程序崩溃的问题。解决办法:1)永远不要在析构函数抛出异常。2)通常第一点有时候不能保证。可以采取如下的方法:~ClassName(){ try{ 阅读全文
posted @ 2013-05-09 19:31 Sophia-呵呵小猪 阅读(229) 评论(0) 推荐(0) 编辑