Обзор довольно старый проект я нашел следующий любопытный фрагмент кода (только соответствующий код извлеченный):Что может означать эта любопытная комбинация «while» и «delete»?
class CCuriousClass {
~CCuriousClass();
CSomeType* object;
};
CCuriousClass::~CCuriousClass()
{
while(object != NULL) {
delete object;
}
}
ли я что-нибудь под контролем, или это простой путь к неопределенному поведению?
То, что я вижу в том, что если object
является нулевым указателем в точке CCuriousClass::~CCuriousClass()
называют все будет в порядке - никаких действий не принимается - но если object
не нулевое значение, это будет бесконечный цикл с неопределенным поведением внутри.
Является ли это скорее всего ошибкой или какой-то умной конструкцией, которую я не понимаю?
Возможно, что-то происходит с этим объектом в другом потоке? – Blindy
Я не знаю, но вы можете перегрузить оператор «delete» объекта? –
@Mike, вы можете, но объект деструктор все равно будет вызван. –