大佬教程收集整理的这篇文章主要介绍了c – 有什么自动化的方式实现后构造函数和析构前的虚拟方法调用?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
这是有效的,但它带有风险,呼叫者将在适当的时候忘记@L_@R_674_11239@_2@这些方法之一或两者.
所以问题是:在C中有什么办法可以自动@L_@R_674_11239@_2@这些方法,所以@L_@R_674_11239@_2@者不用记得去@L_@R_674_11239@_2@它们吗? (我猜,没有,但是我以为我会问,反正有一些聪明的方式来做)
基本理论是对象具有不变量.这个不变量是由构造函数建立的.一旦建立起来,可以@L_@R_674_11239@_2@该类的方法.通过引入需要后构造函数的设计,您将引入在构造函数运行后类不变量不会建立的情况.因此,允许来自后期构建函数的虚函数的@L_@R_674_11239@_2@同样不安全,并且您立即失去了他们似乎拥有的一个明显的收益.
如你所示(可能没有你意识到),他们不需要:
@H_61_2@myObject * obj = new MyObject; obj->Initialize(); // virtual method call,required after ctor for (obj) to run properly obj->AboutTodelete(); // virtual method call,required before dtor for (obj) to clean up properly delete obj;我们来看看为什么不需要这些方法.这两个@L_@R_674_11239@_2@可以从MyObject或其基础之一@L_@R_674_11239@_2@虚函数.但是,MyObject :: MyObject()也可以安全地@L_@R_674_11239@_2@这些函数. MyObject :: MyObject()返回后会发生什么,这将使obj-> Initialize()安全.所以obj-> Initialize()是错误的,或者它的@L_@R_674_11239@_2@可以被移动到MyObject :: MyObject().相反的逻辑与obj-> AboutTodelete()相反.最先导出的析构函数将首先运行,它仍然可以@L_@R_674_11239@_2@所有的虚拟函数,包括AboutTodelete().
以上是大佬教程为你收集整理的c – 有什么自动化的方式实现后构造函数和析构前的虚拟方法调用?全部内容,希望文章能够帮你解决c – 有什么自动化的方式实现后构造函数和析构前的虚拟方法调用?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。