R Справочное руководство по С++

R.12.7 Конструкторы и деструкторы.

   


Назад  |  Вперёд

В конструкторах и деструкторах можно вызывать функцию-член. Отсюда следует, что можно вызывать (непосредственно или косвенно) виртуальные функции. Вызываемая функция должна быть определена в классе самого конструктора или деструктора или в базовых классах, но не должна быть функцией, которая их подавляет в производном классе. Этим обеспечивается то, что еще несозданные объекты не будут использованы при выполнении конструктора или деструктора. Рассмотрим пример:

           class X {
           public:
             virtual void f();
             X() { f(); }  // вызов X::f()
             ~X() { f(); } // вызов X::f()
           };

           class Y : public X {
             int& r;
           public:
             void f()
             {
               r++; // беда, если `r' не инициализировано
             }
             Y(int& rr) ::r(rr) { }
           };

Результат непосредственного или косвенного вызова из конструктора чистой виртуальной функции для инициализируемого объекта неопределен, если только явно не использовано уточнение имени функции ($$R.10.3).


Назад  |  Вперёд


OtDiatlovaOU
К началу книги

Оформление и дизайн книги OtDiatlovaOU.
Вся книга, архив.