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

Ссылки


Home
Бизнес
Справочники
Советы







Материалы книги получены с 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;

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


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

Home  Создание сайтов  Учебник по записи CD  Справочник Web дизайнера Самоучитель IE PHP и MySQL Компьютерные сети С++ E-mail me

Copyright 2007. Климов Александр. All Right Reserved.
Hosted by uCoz