本文内容包括:
用户Eric Postpischil提出了一个回答,其中他主动调用了一个类的析构函数。 这是合法的吗?这被认为是良好的编程实践吗?
我之所以问,是因为我的其中一门课上讲师说这是禁止的,我们永远不能这样做,他错了吗?
虽然该文章中的问题和回答本身很有趣,但它并不是我想要的答案。
本文内容包括:
用户Eric Postpischil提出了一个回答,其中他主动调用了一个类的析构函数。 这是合法的吗?这被认为是良好的编程实践吗?
我之所以问,是因为我的其中一门课上讲师说这是禁止的,我们永远不能这样做,他错了吗?
虽然该文章中的问题和回答本身很有趣,但它并不是我想要的答案。
typedef int INT;
INT i;
i.~INT(); // <- legal code, pseudo-destructor call, no op
上述是合法的C++代码,尽管INT
不是类类型,因此没有析构函数。(只是不要尝试做i.~int()
- 这是非法的。非类类型必须使用别名类型。)
C++析构函数并不是非法的,也不是被禁止或不好的(当然,如果你做错了就不行了)。所以严格来说,你的老师是错的(尽管他可能只是想传达其他观点)。
最常见的例子是使用动态内存分配的类。简单地说,当在堆栈上调用一个已经为自己分配了内存的类的析构函数时,该内存不会被释放。这意味着堆栈上有保留的内存,但没有任何人引用它,也就是说,你无法访问它。换句话说,你有一个内存泄漏。但是,如果你正确地创建一个析构函数并手动释放内存,你就可以避免这种内存泄漏。