Страница 1 из 1

this указатель в конструкторе

Добавлено: Чт окт 02, 2003 3:29 pm
Veselchak U
Вопрос знатокам C++:
Могу ли я использовать указатель this в конструкторе етого-же обьекта?

К примеру, если есть класс Fоо:

Код: Выделить всё

Foo::Foo()
{
   // Bar(this);
}

Я могу гарантировать, что указатель this не будет использоватьса до тех пор пока конструктор не завершит своу работу. Будем говорить, что Bar просто запоминает значение this.

Спасибо!

Добавлено: Чт окт 02, 2003 3:37 pm
Hamster
Можете. Можете даже cast'овать this к типу родительского класса и начать вызывать его методы.

Добавлено: Чт окт 02, 2003 4:10 pm
Veselchak U
Еше раз спасибо! :gen1:

Добавлено: Чт окт 02, 2003 4:25 pm
DenisM
Hamster писал(а):Можете. Можете даже cast'овать this к типу родительского класса и начать вызывать его методы.


Только невиртуальные :nono#:

Добавлено: Пт окт 03, 2003 2:22 am
Vlad G
DenisM писал(а):
Hamster писал(а):Можете. Можете даже cast'овать this к типу родительского класса и начать вызывать его методы.


Только невиртуальные :nono#:

виртуальные в конструкторе не работают :umnik1:

Добавлено: Пт окт 03, 2003 2:56 am
DenisM
Vlad G писал(а):
DenisM писал(а):
Hamster писал(а):Можете. Можете даже cast'овать this к типу родительского класса и начать вызывать его методы.


Только невиртуальные :nono#:

виртуальные в конструкторе не работают :umnik1:


Я бы сказал, что работают, но неправильно, если из конструктора ( или деструктора ) вызывается виртуальный метод, перегруженный в порожденном классе. Пока не закончен вызов конструктора, vtbl указывает на таблицу виртуальных функций этого класса, а не порожденного. Поэтому вместо перегруженного метода в порожденном классе вызовется соответствующий метод из этого ( ну или базового, если в этом метод не перегружен )

Да, кстати, в VC выдается warning при использовании this в constractor'е, именно для того, чтобы не забыть про эту особенность