欢迎光临散文网 会员登陆 & 注册

Effective C++ 第九条Never call virtual functions during constructio

2023-01-12 17:15 作者:九思519  | 我要投稿

Never call virtual functions during construction or destruction.绝不在构造和析构过程中调用virtual函数

在构造函数中调用pure函数

        以上程序无法正常执行,先搞清楚程序执行的顺序,Derived创建之前要先创建Base,也就是说先执行Base的构造函数的时候需要执行 op 函数,但是此时还没有进入Derived,op 函数只是一个 pure 函数,没有实际代码,也就是无法执行。

在构造函数中使用impure函数

        在构造函数中使用了impure函数确实不会造成错误,但是结果与设计相异,我们在Deerived中设计op 函数输出的事 “Hello Derived”,但是输出的结果却是 “Hello Base”。因为Derived构造函数实现之前要先实现Base的构造函数,此时Base调用的是属于Base中的op 函数而非Derived中的构造函数,从而造成与设计不符合。

解决办法

        将 op 设计成 non-pure 函数,通过给Derived传入制定参数来实现目的。

  这里不使用virtual函数,也实现了同样的功能.

Effective C++ 第九条Never call virtual functions during constructio的评论 (共 条)

分享到微博请遵守国家法律