Re[4]: Уничтожение лок. переменных!!!???
От: Павел Кузнецов  
Дата: 06.10.03 08:47
Оценка:
Здравствуйте, MagIH, Вы писали:

M> почему этот код будет работать одинакого на ЛЮБОЙ платформе,

M> если его поведение "не предсказуемо"...

Не на любой, а на тех, которые ты попробовал. Hint: этот код не будет "работать",
например, на платформе, включающей диагностику времени выполнения для вызовов
функций-членов после завершения времени жизни объекта.
Posted via RSDN NNTP Server 1.7 "Bedlam"
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[4]: Уничтожение лок. переменных!!!???
От: Павел Кузнецов  
Дата: 06.10.03 08:51
Оценка: +1
Здравствуйте, MagIH, Вы писали:

M> замечу, что неприятность возникла при использовании ВИРТУАЛЬНОЙ функции.


Стандарт намеренно позволяет (во всяком случае, не запрещает) реализацию невиртуальных
функций с помощью механизмов, аналогичных механизмам реализации виртуальных функций.

M> И связана с тем, что для большинства платформ (не берусь утверждать что для всех)

M> деструктор любого объекта, использующего виртуальные функции является не
M> тривиальным (см. письмо от leper).

Тривиален деструктор, или нет — от платформы не зависит. В частности, любой
деструктор, определенный пользователем, является нетривиальным.
Posted via RSDN NNTP Server 1.7 "Bedlam"
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[2]: Уничтожение лок. переменных!!!???
От: Павел Кузнецов  
Дата: 06.10.03 08:56
Оценка:
Здравствуйте, MagIH, Вы писали:

M> деструктор, в соответствии со стандартом, это ФУНКЦИЯ, вызываемая

M> перед разрушением объекта (заметьте отличие от "функция разрушающая объект").

Согласно стандарту — именно, разрушающая объект (см. 12.4/2).

M> Стандарт так же чётко и ясно оговариват время жизни объекта <...>

M> При этом, Вы имеете полное (закреплённое стандартом) право вызывать деструктор,
M> как и любую другую функцию, в течение времени жизни объекта сколько угодно раз.

Напротив, стандарт это явным образом запрещает (3.8).

M> И ничего с самим "объектом" = "состоянием объекта" = "областью памяти,

M> занимаемая данными-членами класса объекта" не произойдет

Таких гарантий стандарт не дает.

M> Теперь об операторе delete. Он отличается тем, что делает два действия -

M> вызывает деструктор и затем — освобождает память <...>

Верно. Т.е., помимо окончания времени жизни, также оканчивается и storage duration.
Posted via RSDN NNTP Server 1.7 "Bedlam"
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.