我在思考:人们说如果你手动调用析构函数,那么你正在做一些错误的事情。但这总是正确的吗?是否存在任何反例?有没有必要手动调用析构函数的情况,或者避免手动调用析构函数很难/不可能/不切实际的情况?
我在思考:人们说如果你手动调用析构函数,那么你正在做一些错误的事情。但这总是正确的吗?是否存在任何反例?有没有必要手动调用析构函数的情况,或者避免手动调用析构函数很难/不可能/不切实际的情况?
我从未遇到过需要手动调用析构函数的情况。我似乎记得甚至 Stroustrup 也认为这是一种不好的做法。
C+
的创造者 ☺ - Mark K Cowan我有另一种情况,我认为调用析构函数是完全合理的。
当编写“重置”类型的方法以将对象恢复到其初始状态时,调用析构函数以删除正在重新设置的旧数据是完全合理的。
class Widget
{
private:
char* pDataText { NULL };
int idNumber { 0 };
public:
void Setup() { pDataText = new char[100]; }
~Widget() { delete pDataText; }
void Reset()
{
Widget blankWidget;
this->~Widget(); // Manually delete the current object using the dtor
*this = blankObject; // Copy a blank object to the this-object.
}
};
cleanup()
方法来调用析构函数,会不会看起来更清晰? - Violet Giraffe