У меня есть два класса в иерархии классов, где родительский класс должен иметь экземпляр класса, производного от него в качестве переменной-члена. В качестве примера:Экземпляр подкласса в родительском классе
class B;
class A {
public:
B* binst;
A();
};
class B : public A {
};
A::A() {
binst = new B;
}
Очевидно, что это приводит к бесконечной рекурсии в конструкторах, так, чтобы создать новый B, вы должны вызвать конструктор, которая создает новый B, который вызывает конструктор, и так до бесконечности.
Есть ли способ обойти это? Проблема, с которой я сталкиваюсь в этом, заключается в том, что A должен иметь B в ней, но B должен быть получен из A, и нет способа предотвратить это.
Чтобы получить представление о том, почему мне нужно сделать это, рассмотрим объектно-ориентированный иерархию для языка сценариев (например, питона или рубин или Lua, и т.д.):
- Все экземпляры ничего получены из базовый класс, Object.
- Объект имеет таблицу поиска методов, которая является экземпляром метода MethodTable.
- МетодTable является производным от Object и должен быть, чтобы язык сценариев мог работать на нем.
Я полагаю, что все Методы Таблицы имеют поиск одной единственной MethodTable, которая имеет поиск к себе, поэтому нет рекурсии. В этом примере нет конструктора `new B`. Нам нужен ваш фактический случай, чтобы выяснить, что делать с «новым B». – Dialecticus 2010-11-26 23:33:53