Re[2]: Не передвинет ли оптимизатор вызов деструктора
От: morm Россия  
Дата: 08.07.10 21:01
Оценка:
Здравствуйте, morm, Вы писали:

M>Здравствуйте, 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' как 'ненужный'? С этими оптимизаторами ни в чём нельяз быть уверенным


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

M>MS VC++ делает это точно.

M>Мне кажется

M>MyClass2 obj = NULL;
M>try
M>{
M> obj = new MyClass2();
...//конечно
M>}
M>catch(...//тут свое){}
M>delete obj;

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