Здравствуйте, 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>так будет элегантнее