Re: Не передвинет ли оптимизатор вызов деструктора
От: morm Россия  
Дата: 08.07.10 20:55
Оценка:
Здравствуйте, Glenn, Вы писали:

G>Компилятор: MS Visual C++

G>Код:

G>void MyClass::MyMethod()

G>{
G> ...
G> {
G> MyClass2 obj;
G> ...
G> }
G> --m_counter;
G>}

G>'m_counter' есть DWORD-член класса MyClass; MyClass2 — некий класс с деструктором; остальное не важно.


G>ВОПРОС: гарантируется ли что деструктор объекта 'MyClass2 obj' вызовется ДО выполнения '--m_counter'? Не передвинет ли оптимизатор вызов деструктора на момент ПОСЛЕ '--m_counter' — вдруг он просто уберёт блок '{...}', окружающий 'MyClass2 obj' как 'ненужный'? С этими оптимизаторами ни в чём нельяз быть уверенным


Компилятор должен гарантировать уничтожение автоматической переменной при выходе из области видимости.
MS VC++ делает это точно.

Мне кажется
MyClass2 obj = NULL;
try
{
obj = new MyClass2();
}
catch(...//тут свое){}
delete obj;

так будет элегантнее
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.