公共成员变量何时死亡
When do public member variables die?
我有以下C++类:
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
。
也许这个问题对你有用:什么是智能指针,我什么时候应该使用它?
附录:C++的一个主要问题是未定义的行为。如果在此期间内存没有被重用,诸如在空闲后使用之类的编程错误可能会在80%的时间内出现。但有可能会覆盖不相关的内存和/或允许读取外部数据。这是一个严重的安全问题,在这一点上,崩溃的程序是最好的希望。
相关文章:
- 如果非动态变量被指针引用,何时超出范围?
- 变量的值何时可以在C++中意外更改?
- c++ 何时/为什么由值构造/销毁捕获变量
- 何时以及如何初始化和销毁thread_local变量?
- 何时在函数中声明堆栈分配变量?
- 静态存储中的内联变量何时初始化?
- 何时枚举变量在C 中评估
- 程序在 C++11 中使用条件变量进入死锁
- C++ - 我需要一个宏或环境变量来检测我何时在 Windows 上运行 bazel
- 何时在C 11 lambda的定义中捕获需要捕获的变量
- 关键部分或静音是否真的是成员变量,或者何时应成为成员变量
- 何时应在Qt中将子对象声明为其父类的成员变量
- c++:何时初始化声明的变量而不将其分配给任何值
- 引用变量何时合适,为什么?你能解释一下实际的语法和位置吗?
- 何时分配和初始化变量
- 我怎么知道何时在我的代码中访问变量
- 两个条件变量和避免死锁
- 声明并初始化指针后,何时在变量文本前面加上星号,何时不作为前缀
- 公共成员变量何时死亡
- 在发出等待条件变量的信号后,线程何时获取锁?是什么决定了它