gpt4 book ai didi

c++ - 为什么显式调用析构函数不会破坏我的对象?

转载 作者:可可西里 更新时间:2023-11-01 18:41:15 25 4
gpt4 key购买 nike

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

我的代码是这样的:

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++ - 为什么显式调用析构函数不会破坏我的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7396059/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com