我正在调用析构函数来释放内存,但它并没有删除我的对象.它背后的原因是什么?
我的代码是这样的:
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对象访问只会导致未定义的行为.
实际上,没有办法手动释放本地对象占用的内存.本地内存始终自动释放.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。