Передача this в конструктор базового класа или члена

Рейтинг: 0Ответов: 1Опубликовано: 23.01.2011

Почему не рекомендуется использовать this при вызове конструктора базового класса, или конструктора члена класса?

например:

class Derived;

class Base
{
public:
    Base(Derived *pBuzz);
};

class Derived
    : Base
{
public:
    Derived()
        : Base(this) /* warning */
    { }
};

Ответы

▲ 7Принят

Потому что в момент выполнения конструктора базового класса или члена класса объект класса Derived ещё не создан (его конструктор не начал выполнение), а, значит, попытка обратиться к полям и методам класса Derived может привести к неопределённому поведению. Но если такого обращения не производится, то всё в порядке. В параграфе 12.6.2/7 стандарта C++ нашлось разрешение использовать this таким образом, так что warning можно отключать спокойно.