class A
{
public:
A() { _x = 10; }
void print() { cout << _x << endl; delete this; }
int _x;
};
int main()
{
A* a = new A();
a->print();
return 0;
}
Re: Реально ли самоуничтожение класса?
От:
Аноним
Дата:
29.01.04 08:07
Оценка:
Вполне реально. Только не класса, а объекта класса. И как тебе понравится, например такое:
int main()
{
A a;
a.print();
}
Re[2]: Реально ли самоуничтожение класса?
От:
Аноним
Дата:
29.01.04 08:24
Оценка:
Здравствуйте, Аноним, Вы писали:
То то.
И что стандарт такое разрешает?
Мне кажется что первый примерчик работает из-за
случайных совпадений:
-Реализация компилятора
-Чистенькая не испорченная память.
В реальных проектах багов с памятью много,
и примерчик может завалить всю конструкцию.
Особенно в многопоточных приложениях.
MS>Ну хорошо заведи конструктор копирования в private секции.
Ага, а потом кто-нибудь добавит новый конструктор в public-секцию
MS>Вопрос был про delete this. Это обычная практика.
ИМХО более обычная практика — помещение деструктора в private секцию.
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Аноним, Вы писали:
А>То то. А>И что стандарт такое разрешает? А>Мне кажется что первый примерчик работает из-за А>случайных совпадений:
Здравствуйте, Bell, Вы писали:
B>Здравствуйте, MShura, Вы писали:
MS>>Ну хорошо заведи конструктор копирования в private секции.
B>Ага, а потом кто-нибудь добавит новый конструктор в public-секцию
Это зависит от того, можно ли менять исходник или нет.
MS>>Вопрос был про delete this. Это обычная практика. B>ИМХО более обычная практика — помещение деструктора в private секцию.
Согласен, что уж если завел функцию Create то желательно деструктор в private.
Здравствуйте, Bell, Вы писали:
B>Первый пример легален.
+1 Объекты создаваемые динамически в моих программах только так себя и грохают. В том числе и в free-thread COM серверах...
... << RSDN@Home 1.1 beta 2 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн