【发布时间】:2015-12-12 06:21:07
【问题描述】:
我刚有一个面试问题,面试官问了
如何告诉析构函数在它应该被调用的时候没有被调用?
如果不调用析构函数,你会怎么做?
说实话,我不知道答案。我的猜测是将析构函数放在try catch 块中,但我从未见过有人这样做。有没有更好的解决方案?
【问题讨论】:
-
这个问题很模糊。我们可以了解一些上下文吗?
-
是否给出了任何上下文?它们的意思是“未调用还”、“未在程序退出时调用”、“可能未调用(在某些执行路径上)”还是不同的意思?
-
AFAIK 唯一不调用析构函数的情况是,当您使用
new/new[]创建了一个指针而您没有delete/delete[]它时。 -
也许面试中问题的重点是让候选人要求澄清并开始讨论?!
-
也许面试官是想讨论静态成员?在构造时递增并在销毁时递减的静态 int 成员是计算类实例的常用方法,因此您可以使用该计数器来检测析构函数是否已按预期调用。对于清理,我想您还可以存储和维护指向类实例而不是计数器的指针的静态向量,但我无法想象您如何区分合法实例和泄漏实例,除非您想要核化和在某个时候删除该类的每个实例。