在下面的代码片段中,有一类Pets,继承了Cat和Dog类。我想要一套我所有的宠物。
class Pet{
//
};
class Dog: Pet{
//
};
class Cat: Pet{
//
};
int main(
set<Pet> a;
set<Pet*> b;
)
显然,如果我使用选项b,任何指针,狗或猫,都可以在集合中,但我不知道如何制作该集的副本。
同样,如果我复制了set a,那么Cat,Dog的复制构造函数是否会被调用它们各自类型的项目?
答案 0 :(得分:0)
在集a
中,您只能存储Pet
,不存储Cat
或Dog
。因此,复制构造函数问题无关紧要。
使用集合b
,您可以自然地复制它,但副本将包含指向相同对象的指针。除此之外,您还需要将这些对象存储在某个地方。
你可能想要的是set<unique_ptr<Pet>>
。你将无法复制它。
如果您确实要复制多态对象,请查看clone idiom。