Здравствуйте VladD2, Вы писали:
VD>В методах точно можно (в COM-е только так и делают), а в конструкторе врядли.
А почему бы и нет, если delete this будет делаться в конструкторе последнего наследника в иерархии, все будет работать, только вот смысл какой как потом проверить что delete уже вызывался. И вообще, делать нужно по пути меньшего сопротивления, зачем самому себе лишние проблемы создавать, ну если конечно это не сама цель.
delete this, в методах, довольно частая практика, помимо COM’овских объектов, в MFC у Frame’ов, по моему, или еще у кого-то, delete this вызывается в методе обработчике WM_NCDESTROY.
Здравствуйте VladD2, Вы писали:
VD>В методах точно можно (в COM-е только так и делают), а в конструкторе врядли.
Кстати, ради интереса если подумать: куда бы можно было применить delete this в конструкторе?
Вот, к примеру, такая штука: в конструкторе обназуживается, что объект создаться не сможет. Как правильнее обработать эту ситуацию? Я так думаю, что самое правильное — выбросить исключение. Но коллега говорит, что для этого ему необходимо в проект включать обработку исключений, которая до того не использовалась. Вот мне и интересно, можно ли сделать по другому.
P.S. Прошу прощения за перевод темы несколько в другое русло, но вроде бы похоже на продолжение темы...
Здравствуйте Bard, Вы писали:
B>Вопрос: можно ли писать "delete this" в конструкторе и/или методах класса?
в конструкторе нет... а в методах можно, только об'ект должен быть создающимся
в куче...
* thriving in a production environment *
Re[3]: delete this
От:
Аноним
Дата:
06.12.01 08:48
Оценка:
delete this в конструкторе...
Something *dynArray = new Something[10];
чё будет если какой-нить из этих 10 конструкторов вызовет subj?
Здравствуйте The Lex, Вы писали:
TL>Вот, к примеру, такая штука: в конструкторе обназуживается, что объект создаться не сможет. Как правильнее обработать эту ситуацию? Я так думаю, что самое правильное — выбросить исключение.
Именно так.
TL>Но коллега говорит, что для этого ему необходимо в проект включать обработку исключений, которая до того не использовалась. Вот мне и интересно, можно ли сделать по другому.
Можно и по другому, но тогда необходимо применить двухфазную схему создания объекта класса: сначала создается пустой каркас объекта, а затем пользователем класса вызывается метод, осуществляющий его (объект) инициализацию (с выделением памяти, установкой необходимых связей, указателей, хэндлов, стилей, признаков...), и усиленно контролировать вторую фазу.
В таком стиле написана MFC.
Обычно создание пустого объекта не требует большого расхода памяти. Если же даже на это в системе памяти не хватает, значит она уже и так валится, необратимо...
Здравствуйте Bard, Вы писали: B>Вопрос: можно ли писать "delete this" в конструкторе и/или методах класса?
delete this напоминает приказ солдатам сделать харакири, если они попадут в плен...
>Вот, к примеру, такая штука: в конструкторе обназуживается, что объект >создаться не сможет. Как правильнее обработать эту ситуацию?
Так же, наверное, как это сделано в STL для *fstream -- без всяких исключений.
Тот, кто желает, но не делает, распространяет чуму.