Изменение указываемого объекта во время выполнения программы
При желании интерфейсный указатель может сменить указываемый объект прямо во время выполнения программы.
class Foo;
class PFoo {
private:
Foo* foo;
public:
PFoo();
void DoSomething(bool x);
// Другие функции класса
};
void PFoo::DoSomething(bool x)
{
if (x) {
delete foo;
foo = new DerivedFromFoo;
}
Foo->DoSomething();
}
Пример уже встречался в предыдущей главе: при попытке неконстантного обращения к указываемому объекту указатель выбирал другую форму этого объекта. Такой подход работает вполне нормально, если не делать глупостей (например, получать адреса членов указываемого объекта).