Re[2]: throw в конструкторе?
От: uzhas Ниоткуда  
Дата: 31.12.09 11:32
Оценка: 7 (1) :)
Здравствуйте, Alexander G, Вы писали:

AG>Здравствуйте, slava_phirsov,


AG>К уже сказанному можно добавить, что корректное освобождение памяти, выделенной new, при исключении из конструктора — это единственная причина, почему при написании своей версии оператора new следует написать и свою версию оператора delete. Компилятором неявно вызывается особая форма оператора delete только при исключении из конструктора, стейтмент delete p; — это деструктор и стандартный delete.


мне кажется, что вы сморозили чушь
рекомендую перечитать 5.3.4 (new) и 5.3.5 (delete)
в двух словах:
5.3.4.8:
A new-expression obtains storage for the object by calling an allocation function (3.7.3.1) If the new-expression terminates by throwing an exception, it may release storage by calling a deallocation function (3.7.3.2)

5.3.5.7
The delete-expression will call a deallocation function.

Allocation functions — это operator new(), operator new[]() причем implementation provides default definitions of the global allocation functions
Deallocation functions — это operator delete(), operator delete[]() причем implementation provides default definitions of the global deallocation functions

если написать ::new A(), то используется глобальная функция аллокации, если
new A(), то функция operator new() сначала ищется в скоупе A, затем в глобальном скоупе

вывод:
"при написании своей версии оператора new следует написать и свою версию оператора delete" для того, чтобы не было глюков и память очищалась правильно
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.