У меня есть два класса с отношениями родитель-потомок (класс Родитель
имеет «имеет» Дочерний класс
) , а класс Child
имеет обратный указатель на Parent
. Было бы неплохо инициализировать родительский указатель при создании дочернего элемента следующим образом:
class Child;
class Parent;
class Child
{
public:
Child (Parent* parent_ptr_) : parent_ptr(parent_ptr_) {};
private:
Parent* parent_ptr;
};
class Parent
{
public:
Parent() : child(this) {};
private:
Child child;
}
Теперь я знаю, что люди рекомендуют не использовать this
в списке инициализации, и C ++ FAQ говорит, что я получу предупреждение компилятора (кстати, на VS2010 я не получаю предупреждения), но мне это действительно нравится больше, чем вызов некоторой функции set в Parent
конструктор. Мои вопросы:
этот
указатель при создании объекта Дочерний
? Спасибо,
Боаз
РЕДАКТИРОВАТЬ: Спасибо, Тимбо, это действительно дубликат (да, я даже выбрал те же имена классов). Итак, давайте добавим ценность: как насчет ссылок? Можно ли / безопасно делать следующее? :
class Child
{
public:
Child (Parent& parnet_ptr_) : parent_ptr(parent_ptr_) {};
private:
Parent* parent_ptr;
};
class Parent
{
public:
Parent() : child(*this) {};
private:
Child child;
}