我想将某个派生类的对象存储为另一个对象的属性。
我的问题是要知道要存储的对象的大小,因为它可以是给定基类的任何派生类。我不能只为基类的对象分配内存,对,因为它更小。我想,typeof运算符也只会给出基类的大小,对吧?
这是我的示例代码。请参阅评论以了解我的意思。请原谅我的原创性......</p>
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 的生命周期内保留属性对象。
谢谢!