【发布时间】:2010-12-08 17:26:37
【问题描述】:
使用堆栈分配的对象将对象存储在异构向量中
你好,
假设我有一个抽象类 CA,派生到 CA1、CA2 或其他类。
我想将这些派生类型的对象放入一个向量中,并将其嵌入到一个类 CB 中。为了获得正确的多态性,我需要存储一个指针向量:
class CB
{
std::vector <CA*> v;
};
现在,假设我有以下主要功能:
int main()
{
CB b;
CA1 a1;
CA2 a2;
b.Store( a1 );
b.Store( a2 );
}
我如何以简单的方式编写方法void CB::Store(const CA&),以便在原始对象被销毁时存储的对象仍然存在(在上面的简单示例中不会发生)。
我的问题是我需要先在堆上复制对象,然后再将它们的地址复制到向量中,但是如何创建派生类型的对象?当然,我可以使用 RTTI,搜索所有可能的类型,创建和分配指针,然后将对象复制(通过适当的转换)到分配的空间中,然后再将其推入向量中。但这似乎很复杂,不是吗?
有没有更简单的方法?
(并且没有在 main 中使用动态分配!)
【问题讨论】:
-
主要,他说。我认为他想尽量让艰苦的工作(动态分配)完成并远离客户。
标签: c++ inheritance vector polymorphism dynamic-memory-allocation