С++ - язык, который изучается постепенно.ГЛАВА 13. Наследование операторов new и delete


Материалы книги получены с http://www.itlibitum.ru/

Наследование операторов new и delete

Если перегрузить операторы new и delete для некоторого класса, перегруженные версии будут

унаследованы производными классами. Ничто не помешает вам снова перегрузить new и/или delete в одном из этих производных классов.

class Bar : public Foo {

public:

virtual ~Bar(); // Foo::~Foo тоже должен быть виртуальным

void* operator new(size_t bytes);

void operator delete(void* space, size_t bytes);

};

С виртуальным деструктором все работает. Если деструктор не виртуальный, в следующем фрагменте будет вызван правильный оператор new и оператор delete базового класса:

Foo* foo = new Bar;

delete foo;

Хотя этот фрагмент работает, подобное переопределение перегруженных операторов обычно считается дурным тоном. Во всяком случае в кругу знатоков С++ о таких вещах не говорят. Когда производный класс начинает вмешиваться в управление памятью базового класса, во всей программе начинают возникать непредвиденные эффекты. Если вам захочется использовать несколько стратегий управления памятью в одной иерархии классов, лучше сразу включить нужную стратегию в конкретный производный класс средствами множественного наследования, чем унаследовать ее и потом заявить в производном классе: «Ха-ха, я пошутил».


Назад    Содержание    Далее    

Copyright 2005. Климов Александр. All Right Reserved.
Сайт создан в системе uCoz