Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно
pva pva вне форума Автор темы

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


Вопрос не в этом. Дело в том, что операция delete this вообще говоря противоречит смыслу. Перед вызовом деструктора объект уже не живёт, а его указатель используется, да ещё и виртуальной функцией.
использовать код вроде switch(action) {...} не хочется, т.к. объекты хранят разную информацию.
Код: Выделить весь код
class X {}
class A : X {int n;virtual void foo();}
class B : X {double f;}

std::auto_ptr<X> px(new A());

void A::foo()
{
   // пожелал заменить себя 
   // стандартный аллокатор ::new выделит достаточно памяти
   px.reset(new B());
    // A уже не существует, но используется его указатель
    // например: ++n; по идее здесь access violation
}

Отправлено: 10:39, 03-11-2005 | #3