和记娱乐


网站导航

联系我们

和记娱乐

联系人: 

电 话:021-64057486

公司网址:http://www.happy123456789.com

   址:成都市松江区漕河泾松江新兴产业园区研展路丰产支路55号B座803室

邮编:201165


通信科技

您的当前位置: 和记娱乐主页 > 通信科技 >

Effective C++笔记之九:绝不在构造和析构过程中调

发布日期:2019-11-16 09:58 来源:和记h88 发布人:和记娱乐 点击:

  假设你有个class 继承体系,用来塑模股市交易如买进、卖出的订单等等。这样的交易一定要经过审计,所以每当创建个个交易对象,在审计日志(audit log) 中也需要创建一笔适当记录。下面是一个看起来颇为合理的做法:

  这一似乎反直觉的行为有个好理由。由于base class 构造函数的执行更早于derived class 构造函数,当base class 构造函数执行时derived class 的变量尚未初始化。如果此期间调用的virtual 函数下降至derived classes 阶层,要知道derived class的函数几乎必然取用local 变量,而那些变量尚未初始化。这将是一张通往不明确行为和彻夜调试大会串的直达车票。要求使用对象内部尚未初始化的成分是的代名词,所以C++ 不让你走这条。

  相同道理也适用于析构函数。一旦derived class 析构函数开始执行,对象内的derived class 变量便呈现未定义值,所以C++ 视它们仿佛不再存在。进入baseclass 析构函数后对象就成为一个base class 对象,而C++ 的任何部分包括virtual 函数、dynamic casts 等等也就那么看待它。

  在构造和析构期间不要调用virtual 函数,因为这类调用从不下降至derived class(比起当前执行构造函数和析构函数的那层)。

      和记娱乐,和记h88,h88平台官网