派生类销毁期间纯虚函数的范围 - 在C++中

Man*_*rma 4 c++ oop visual-c++ c++11

在销毁派生类对象的过程中,我首先点击派生类析构函数,然后点击基类析构函数(这是预期的).但我很想知道 - 派生类的功能在什么时候超出范围(被破坏).

一旦控件离开派生类析构函数并走向基础,它会发生吗?或者,一旦我们完成了基类析构函数,它就会发生.

谢谢

Dav*_*eas 8

一旦最派生类的析构函数完成,对象的动态类型可以被认为是下一个派生类型的类型.也就是说,对基础析构函数中的虚方法的调用将发现该时间点的最终覆盖是在基础级别.(施工期间相反)

struct base {
   base() { std::cout << type() << std::endl; }
   virtual ~base() { std::cout << type() << std::endl; }
   virtual std::string type() const {
      return "base";
   }
};
struct derived : base {
   virtual std::string type() const {
      return "derived";
   }
};
int main() {
   base *p = new derived;
   std::cout << p->type() << std::endl;
   delete p;
}
// output:
// base
// derived
// base
Run Code Online (Sandbox Code Playgroud)

  • 是的,请查看:http://www.artima.com/cppsource/nevercall.html (2认同)