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 允许读取外部数据。这是一个严重的安全问题,程序崩溃是目前最好的结果。
我有以下 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 允许读取外部数据。这是一个严重的安全问题,程序崩溃是目前最好的结果。