Я хочу сохранить объект некоторого производного класса как свойство другого объекта.
Проблема для меня состоит в том, чтобы знать размер объекта, который будет сохранен, поскольку это может быть любой производный класс данного базового класса. Я не могу просто выделить память для объекта базового класса, так как он меньше. Полагаю, оператор typeof также просто даст размер базового класса, верно?
Вот мой пример кода. Пожалуйста, смотрите комментарии, чтобы понять, что я имею в виду. Извините за неоригинальность ...
BaseA {};
DerivedA1 : BaseA {public: void property() { cout << 1; }};
DerivedA2 : BaseA {public: void property() { cout << 2; }};
// etc. - several derived classes.
BaseB // Contains (or links to) an instance of class derived from BaseA.
{
public:
BaseA * instanceA;
BaseB (BaseA instanceAX)
{
// ??? => How to allocate memory for the object
// I don't know the real type of?
instanceA = new BaseA (instanceAX);
}
BaseB (BaseA instanceAX) { delete instanceA; }
};
main()
{
DerivedA1 instanceA1;
BaseB instanceB (instanceA1);
// Use "property" regardless of which derived class it belongs to.
instanceB.instanceA->property();
}
Я мог бы хранить указатель вместо самого объекта, это было бы проще. Но я не уверен, что хочу рассчитывать на то, что вызывающая сторона сохранит объект свойства в течение жизни экземпляра instanceB .
Спасибо!