public 成员变量什么时候消亡?

When do public member variables die?

我有以下 C++ class:

class DEF
{
   //...
}

class ABC
{
   public:
      DEF my_def;
      ~ABC();
   //...
}

还有某处:

ABC* abc = new ABC(...);
delete abc;

我的问题:

调用 delete abc 后 my_def 是否可以访问?在 删除后 abc->my_def.somefunc() 是否安全? -

不,在abc的析构函数运行之后,其成员将按照声明的相反顺序被销毁。当 abc 被删除时,它的所有内存都被释放了。在您的示例中包括 my_def

也许这个问题对你有用:What is a smart pointer and when should I use one?

附录:C++ 的一个主要问题是 undefined behavior. Programming errors such as use-after-free 如果在此期间未重新使用内存,则可能会在 80% 的时间内正常工作。但是很可能你覆盖了不相关的内存 and/or 允许读取外部数据。这是一个严重的安全问题,程序崩溃是目前最好的结果。