【发布时间】:2018-03-06 19:53:20
【问题描述】:
我正在用这段代码在 C++ 中试验析构函数:
#include <iostream>
struct temp
{
~temp() { std::cout << "Hello!" << std::endl; }
};
int main()
{
temp t;
t.~temp();
}
我看到“你好!”正在打印两次。析构函数的调用不应该释放对象并且当它超出范围时不应该再次调用析构函数?还是有什么别的概念?
(我不打算在实践中这样做。我只是想了解这里发生了什么。)
【问题讨论】:
-
您不应该手动调用析构函数PERIOD。当对象超出范围或使用动态内存分配时它们被删除时,它会自动调用。
-
@ddriver:有一个例外:如果你使用placement new分配一个对象,那么你必须手动调用它的析构函数。
-
@ddriver:请不要那么苛刻。
-
@ddriver:我认为并非只有我一个人将
PERIOD之类的全高词视为以无益的语气表达愤怒或沮丧的一种方式。并不是提问者坚持要这样做,只是问为什么。 -
@ddriver:这当然是我的想法。但是为什么根本需要那个“时期”呢?即使没有帽子,它对我来说确实看起来很苛刻,我想起了我的一个朋友几年前和我谈论完全相同的话题。这有点像当你对你的孩子说“因为它就是这样,句号。”,这只是一种解释(在这种情况下,充其量是不正确或不完整的)。
标签: c++ destructor