我遇到了一些奇怪的问题。我在类方法中使用 delete 运算符,我想知道如何解决这个问题。
这是代码:
#include <iostream>
using namespace std;
class A
{
public:
int a;
~A() {
cout << "call ~A()" << endl;
}
void action()
{
/* code here */
delete this; //this line depends on some if statements
/* code here */
}
void test2() {
cout << "call test2()" << a << endl;
}
void test() {
a = 10;
cout << "call test()" << endl;
action();
//how can I check if data is deleted?
test2();
}
};
int main()
{
A* a = new A();
a->test();
}
如何检查数据是否被删除操作符删除? 有可能吗?
最佳答案
使用
delete this;
几乎总是“不好的”。有异常(exception),但那些真的很不寻常。想想你想做什么。大多数时候,这意味着您应该有一个包装对象和一个由包装对象创建/删除的内部对象。您无法检查某些内容是否已被删除(以可靠的方式/可移植的方式)。在您的特定测试用例中,您通过“在对象被销毁后使用它”来执行“未定义的行为”,这意味着您无法真正判断将要发生什么。您必须相信 C++ 运行时
delete
会按照标签上的说明执行操作。
关于c++ - 删除类内部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17897058/