c++ - 删除类内部

标签 c++ class delete-operator

我遇到了一些奇怪的问题。我在类方法中使用 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();

}

如何检查数据是否被删除操作符删除? 有可能吗?

最佳答案

  1. 使用 delete this; 几乎总是“不好的”。有异常(exception),但那些真的很不寻常。想想你想做什么。大多数时候,这意味着您应该有一个包装对象和一个由包装对象创建/删除的内部对象。

  2. 您无法检查某些内容是否已被删除(以可靠的方式/可移植的方式)。在您的特定测试用例中,您通过“在对象被销毁后使用它”来执行“未定义的行为”,这意味着您无法真正判断将要发生什么。您必须相信 C++ 运行时 delete 会按照标签上的说明执行操作。

关于c++ - 删除类内部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17897058/

相关文章:

c++ - 将共享指针作为参数传递

java - 如何获取从 Eclipse IDE 中的类调用的方法列表?

c++ - 从类私有(private)数组返回垃圾数据

c++ - 在 C++ 中将对象存储在另一个对象中的正确方法?

c++ - 在 NULL 指针上调用 delete - C++03 与 C++11

c++ - 将 ostream 复制到 std::string

c++ - 自动卸载 OS X 驱动程序

c++ - 使用着色器绘制多个对象 (GLEW)

class - Arduino:用户自定义类型 "does not name a type"

c++ - 双免腐败