C++ “的用法;这";自毁函数

C++ “的用法;这";自毁函数,c++,this,destructor,C++,This,Destructor,用这个参数调用析构函数是否有效? 函数不存储指针,但假定为完整的函数对象。此在析构函数中仍然有效 但是,您需要记住,一旦对象被破坏,虚拟函数将不再像您预期的那样正常工作;见例。本质上,对象的动态类型会随着每个析构函数的完成而修改。一句话:是。 在D`TOR中使用此是完全有效的,该对象在DTOR的最后一行之前是完全有效的。当然,如果DTOR本身撕裂了对象的各个部分(例如,清空ptr等),那么您就是在攻击自己,但这完全是您的代码,而不是cpler生成的代码……它们确实工作正常。只是正常工作函数的定义

这个
参数调用析构函数是否有效?

函数不存储指针,但假定为完整的函数对象。

在析构函数中仍然有效

但是,您需要记住,一旦对象被破坏,虚拟函数将不再像您预期的那样正常工作;见例。本质上,对象的动态类型会随着每个析构函数的完成而修改。

一句话:是。

在D`TOR

中使用
是完全有效的,该对象在DTOR的最后一行之前是完全有效的。当然,如果DTOR本身撕裂了对象的各个部分(例如,清空ptr等),那么您就是在攻击自己,但这完全是您的代码,而不是cpler生成的代码……它们确实工作正常。只是正常工作函数的定义不同。我的意思是——它们按设计工作。或者说,委员会对“正常工作”的定义在实践中没有多大用处。我相信有可能发明一些用例,您确实希望调用基本ctor/dtor中的虚拟函数的基类版本,而且委员会也考虑过这种情况。否则他们会给实现更多的自由,只是说是UB来打电话。这可能更有效,因为实现不必在每个dtor完成时不断调整vtable指针(或等效指针)。事实上,我们为不使用的东西付费。@SteveJessop:当编译器可以证明您没有进行虚拟调用时,就不需要重新安排vtable。这通常是可能的,但并不常见。