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

Ответить
Аватара пользователя
Veselchak U
Уже с Приветом
Сообщения: 1787
Зарегистрирован: Вт ноя 26, 2002 11:24 pm
Откуда: Sevastopol --> Ft. Lauderdale-->Boston-->Chicago

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

Сообщение Veselchak U »

Вопрос знатокам C++:
Могу ли я использовать указатель this в конструкторе етого-же обьекта?

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

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

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

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

Спасибо!
Hamster
Уже с Приветом
Сообщения: 11475
Зарегистрирован: Пн ноя 20, 2000 4:01 am
Откуда: Escondido, CA
Контактная информация:

Сообщение Hamster »

Можете. Можете даже cast'овать this к типу родительского класса и начать вызывать его методы.
Аватара пользователя
Veselchak U
Уже с Приветом
Сообщения: 1787
Зарегистрирован: Вт ноя 26, 2002 11:24 pm
Откуда: Sevastopol --> Ft. Lauderdale-->Boston-->Chicago

Сообщение Veselchak U »

Еше раз спасибо! :gen1:
Аватара пользователя
DenisM
Уже с Приветом
Сообщения: 1976
Зарегистрирован: Вт июн 08, 1999 4:01 am
Откуда: SPb -> SFBA -> Beaverton, OR

Сообщение DenisM »

Hamster писал(а):Можете. Можете даже cast'овать this к типу родительского класса и начать вызывать его методы.


Только невиртуальные :nono#:
Аватара пользователя
Vlad G
Уже с Приветом
Сообщения: 596
Зарегистрирован: Вс янв 20, 2002 4:01 am
Откуда: Israel

Сообщение Vlad G »

DenisM писал(а):
Hamster писал(а):Можете. Можете даже cast'овать this к типу родительского класса и начать вызывать его методы.


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

виртуальные в конструкторе не работают :umnik1:
Аватара пользователя
DenisM
Уже с Приветом
Сообщения: 1976
Зарегистрирован: Вт июн 08, 1999 4:01 am
Откуда: SPb -> SFBA -> Beaverton, OR

Сообщение DenisM »

Vlad G писал(а):
DenisM писал(а):
Hamster писал(а):Можете. Можете даже cast'овать this к типу родительского класса и начать вызывать его методы.


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

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


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

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

Вернуться в «Вопросы и новости IT»