【发布时间】:2009-12-22 12:29:55
【问题描述】:
回顾一个相当老的项目我发现了以下奇怪的代码sn-p(只提取了相关代码):
class CCuriousClass {
~CCuriousClass();
CSomeType* object;
};
CCuriousClass::~CCuriousClass()
{
while( object != NULL ) {
delete object;
}
}
我是否监督过任何事情,或者这是一条通向未定义行为的简单道路?
我在这里看到的是,如果 object 在被调用的 CCuriousClass::~CCuriousClass() 处是一个空指针,一切都会好起来的 - 不采取任何行动 - 但如果 object 不为空,这将是一个无限循环内部未定义的行为。
这很可能是一个错误或一些我不理解的智能构造吗?
【问题讨论】:
-
也许其他线程中的对象发生了什么事?
-
我不知道,但你能重载对象的“删除”运算符吗?
-
@Mike,你可以,但是对象的析构函数仍然会被调用。
-
看起来不对。即使它有效(由于一些愚蠢的析构函数代码),也应该高度评论以准确描述正在发生的事情。然后当明智的人看到它并读取 cmets 时,他们应该重新分解以使其像普通代码一样工作。
标签: c++ memory-management pointers