显式调用析构函数

时间:2015-04-19 20:39:12

标签: c++ destructor explicit

在对析构函数进行显式调用后,我仍然可以访问对象吗?

例如,

class A{
        public:
            A(){
                cout<<"Constructor\n";
                x=5;
            }
            ~A(){
                cout<<"Destructor\n";
            }
        int x;
    };


int main() {
    ios_base::sync_with_stdio(false);

    A obj;
    obj.~A();
    obj.x=4;
    cout<<obj.x<<endl;

    return 0;
}

给出输出

  

构造   析构函数   4   析

即使在调用析构函数后,如何才能访问obj.x? 如果显式调用没有破坏对象,那么它会做什么?

1 个答案:

答案 0 :(得分:0)

它调用析构函数,但它不会释放内存。内存将在函数末尾解除分配。

顺便说一句,如果你不了解会发生什么,你可能不应该这样做:析构函数将在范围的最后被第二次调用,这可能会导致问题,如果它可以&#39 ;被调用两次(通常是这种情况)。