Re: delete this
От: KoraK Россия http:\\none.ru
Дата: 06.12.01 12:12
Оценка: -1
Здравствуйте Bard, Вы писали:

B>Вопрос: можно ли писать "delete this" в конструкторе и/или методах класса?


Нет
delete this
От: Bard  
Дата: 05.12.01 22:24
Оценка:
Вопрос: можно ли писать "delete this" в конструкторе и/или методах класса?
Re: delete this
От: VladD2 Российская Империя www.nemerle.org
Дата: 05.12.01 23:25
Оценка:
Здравствуйте Bard, Вы писали:

B>Вопрос: можно ли писать "delete this" в конструкторе и/или методах класса?


В методах точно можно (в COM-е только так и делают), а в конструкторе врядли.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: delete this
От: Sashko Россия http://www.dc.baika.ru/
Дата: 06.12.01 01:34
Оценка:
Здравствуйте VladD2, Вы писали:

VD>В методах точно можно (в COM-е только так и делают), а в конструкторе врядли.


А почему бы и нет, если delete this будет делаться в конструкторе последнего наследника в иерархии, все будет работать, только вот смысл какой как потом проверить что delete уже вызывался. И вообще, делать нужно по пути меньшего сопротивления, зачем самому себе лишние проблемы создавать, ну если конечно это не сама цель.

delete this, в методах, довольно частая практика, помимо COM’овских объектов, в MFC у Frame’ов, по моему, или еще у кого-то, delete this вызывается в методе обработчике WM_NCDESTROY.
Re[2]: delete this
От: The Lex Украина  
Дата: 06.12.01 07:19
Оценка:
Здравствуйте VladD2, Вы писали:

VD>В методах точно можно (в COM-е только так и делают), а в конструкторе врядли.

Кстати, ради интереса если подумать: куда бы можно было применить delete this в конструкторе?

Вот, к примеру, такая штука: в конструкторе обназуживается, что объект создаться не сможет. Как правильнее обработать эту ситуацию? Я так думаю, что самое правильное — выбросить исключение. Но коллега говорит, что для этого ему необходимо в проект включать обработку исключений, которая до того не использовалась. Вот мне и интересно, можно ли сделать по другому.

P.S. Прошу прощения за перевод темы несколько в другое русло, но вроде бы похоже на продолжение темы...
Голь на выдумку хитра, однако...
Re: delete this
От: Igor Soukhov  
Дата: 06.12.01 07:44
Оценка:
Здравствуйте 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?
Re[3]: delete this
От: Игорь Вартанов Ниоткуда  
Дата: 06.12.01 10:11
Оценка:
Здравствуйте The Lex, Вы писали:

TL>Вот, к примеру, такая штука: в конструкторе обназуживается, что объект создаться не сможет. Как правильнее обработать эту ситуацию? Я так думаю, что самое правильное — выбросить исключение.


Именно так.

TL>Но коллега говорит, что для этого ему необходимо в проект включать обработку исключений, которая до того не использовалась. Вот мне и интересно, можно ли сделать по другому.


Можно и по другому, но тогда необходимо применить двухфазную схему создания объекта класса: сначала создается пустой каркас объекта, а затем пользователем класса вызывается метод, осуществляющий его (объект) инициализацию (с выделением памяти, установкой необходимых связей, указателей, хэндлов, стилей, признаков...), и усиленно контролировать вторую фазу.
В таком стиле написана MFC.

Обычно создание пустого объекта не требует большого расхода памяти. Если же даже на это в системе памяти не хватает, значит она уже и так валится, необратимо...
---
С уважением,
Игорь
Re: delete this
От: volk  
Дата: 07.12.01 18:04
Оценка:
Здравствуйте Bard, Вы писали:
B>Вопрос: можно ли писать "delete this" в конструкторе и/или методах класса?

delete this напоминает приказ солдатам сделать харакири, если они попадут в плен...

>Вот, к примеру, такая штука: в конструкторе обназуживается, что объект >создаться не сможет. Как правильнее обработать эту ситуацию?


Так же, наверное, как это сделано в STL для *fstream -- без всяких исключений.
Тот, кто желает, но не делает, распространяет чуму.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.