手动调用析构函数通常是个坏主意。关于析构函数的 C++ FAQ 部分有很多关于这方面的好信息。
如果您确实想明确地销毁一个对象,您可以使用额外的作用域来安全地调用析构函数(请参阅此 FAQ条目)。此方法还可以防止您使用已销毁的对象实例。尽管该实例似乎可用,但实际上并非如此。
如果您的意图是释放类实例所拥有的一些资源,但不是全部,您可以尝试两件事:
- 在类上定义一个
clear()(或类似的)方法。
- 确保在
clear()调用后保持类的不变量。
假设您最初手动调用析构函数的方法有效,或者您选择执行与上述clear()方法类似的操作,在这两种情况下,您以后都可能遇到问题。
在 C++ 中,一种很好理解且经常实践的资源管理方法是 Resource Acquisition Is Initialization(通常缩写为 RAII,但如果名称混淆,请忽略该名称,这个概念是可以理解的)。有关有用信息,请参阅此Wikipedia 文章或此答案。
这是 tl;博士虽然:
- 资源的生命周期应始终与对象的生命周期相关联。
- 对象的生命周期从构造函数完成时开始
- 对象的生命周期在析构函数完成时结束。
遵循这个习惯用法通常可以防止 C++ 资源管理问题发生。