У меня есть два класса в иерархии классов, где родительский класс должен иметь экземпляр класса, производный от него в качестве переменной-члена.В качестве примера:
class B;
class A {
public:
B* binst;
A();
};
class B : public A {
};
A::A() {
binst = new B;
}
Очевидно, что это вызывает бесконечную рекурсию в конструкторах, потому что для создания нового B вам нужно вызвать конструктор A, который создает новый B, который вызывает конструктор A, и поэтому adбесконечности.
Есть ли способ обойти это?Проблема, с которой я сталкиваюсь в этом, состоит в том, что у A должен быть B, но B должен быть получен из A, и нет способа предотвратить это.
Чтобы понять, почему мне нужно это сделать, рассмотрим объектно-ориентированную иерархию для языка сценариев (например, python, ruby, lua и т. Д.):
- Все экземплярывсе, что происходит от базового класса, Object.
- Объект имеет таблицу поиска метода, которая является экземпляром MethodTable.
- MethodTable является производным от Object и должен использоваться языком сценариев для работы с ним.