Здравствуйте, MagIH, Вы писали:
M> почему этот код будет работать одинакого на ЛЮБОЙ платформе,
M> если его поведение "не предсказуемо"...
Не на любой, а на тех, которые ты попробовал. Hint: этот код не будет "работать",
например, на платформе, включающей диагностику времени выполнения для вызовов
функций-членов после завершения времени жизни объекта.
Posted via RSDN NNTP Server 1.7 "Bedlam"
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Здравствуйте, MagIH, Вы писали:
M> замечу, что неприятность возникла при использовании ВИРТУАЛЬНОЙ функции.
Стандарт намеренно позволяет (во всяком случае, не запрещает) реализацию невиртуальных
функций с помощью механизмов, аналогичных механизмам реализации виртуальных функций.
M> И связана с тем, что для большинства платформ (не берусь утверждать что для всех)
M> деструктор любого объекта, использующего виртуальные функции является не
M> тривиальным (см. письмо от leper).
Тривиален деструктор, или нет — от платформы не зависит. В частности,
любой
деструктор, определенный пользователем, является нетривиальным.
Posted via RSDN NNTP Server 1.7 "Bedlam"
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Здравствуйте, 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"
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен