c – 对析构函数的显式调用是不是要破坏我的对象为什么?

我正在调用析构函数来释放内存,但它并没有删除我的对象.它背后的原因是什么?

我的代码是这样的:

class A
{
public: 
    int a;
    A()
    {
        cout << "a" << endl;
    }
};

class B :public A
{
public: 
    int b;
    B()
    {
        cout << "b" << endl; a = 10; b = 20;
    }
    ~B()
    {
        cout << a << b << endl;
    }
};

我正在使用它:

int main()
{
    {
        B b;
        b.~B();
        b.b=100;  // why this step is executed?
    }
    int x;
    cin>>x;
    return 0;
}

解决方法

i m calling destructor to deallocate memory

为什么?析构函数不释放对象占用的内存.从不做.

非平凡的析构函数会终止对象的生命周期,但它不会终止对象的存储持续时间.这意味着内存仍然被分配,它只是变得“原始”(未初始化).
所以,从这个意义上讲,它正在摧毁你的对象.

同时,一个简单的析构函数根本没有效果.即使你明确地调用它,对象的生命周期也不会结束.

在你的情况下,析构函数B ::〜B虽然是非平凡的,但这正式意味着通过调用它来结束对象的生命周期.你破坏了它,因为可以销毁一个本地对象. But the memory remains.尝试将该内存作为B对象访问只会导致未定义的行为.

实际上,没有办法手动释放本地对象占用的内存.本地内存始终自动释放.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...