c++ - 显式调用析构函数

标签 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;
}

给出输出

Constructor Destructor 4 Destructor

我怎么能在调用析构函数之后访问 obj.x? 如果显式调用没有销毁对象,那么它做了什么?

最佳答案

它会调用析构函数,但不会释放内存。内存将在函数结束时释放。

顺便说一句,如果你不明白发生了什么,你可能不应该这样做:析构函数将在作用域结束时被第二次调用,如果它不能被调用两次可能会导致问题(通常是这种情况)。

关于c++ - 显式调用析构函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29735569/

相关文章:

c++ - 模板类中的 Int 模板成员函数

c++ - 找到与给定数字相乘的数字的有效方法

c++ - 从赋值运算符调用析构函数有什么意想不到的后果吗?

c++ - 我应该如何为 DLL 使用此模板函数显式实例化?

typescript - 在 typescript 中明确分配任何类型

c++ - 在 OpenGL 中创建环境堆栈

c++ - 如何使用 boost::joined_range 实现范围适配器

c# - 通用显式转换失败 C#

c++ - 默认析构函数释放类的数组成员,C++

c++ - 为什么这在 C++ 构造函数中不起作用