Gav*_*vin 1 c++ object-slicing
我有一个Mammal父类.
Dog,Cat,Lion是子类.
我使用向量来保存所有子类作为Mammal对象
vector<Mammal> v;
并使用此行将新对象附加到矢量.
v.push_back(new Dog(Name, Blue, Owner));
显然它不起作用.Error no instance of overload function在编译期间向我抛出.我是C++的新手所以我不确定动态创建父类数组以保存所有子对象的正确方法是什么
buchipper已经给了你很好的建议.如果您想正确管理宠物的生命周期,请考虑使用std::unique_ptr<>或std::shared_ptr<>代替原始指针:
// the vector owns the pets and kills them, when they are removed
// from the vector
vector<std::unique_ptr<Mamal> > v1
// the vector has shared ownership of the pets. It only kills them,
// when noone else needs them any more
vector<std::shared_ptr<Mamal> > v2
// the vector has no ownership of the pets. It never kills them.
vector<Mamal*> v3
在最后一种情况下,其他人必须照顾宠物的死亡,否则他们会像僵尸一样在你的记忆中徘徊.你不想对你的宠物那样,对吗?
更新 
哦,我忘了提,你应该更喜欢make_shared()和make_unique()新的,或使用emplace_back()而不是push_back()
v1.emplace_back(new Dog{Name, Blue, Owner});
v1.push_back(make_unique<Dog>(Name, Blue, Owner))
v2.emplace_back(new Dog{Name, Blue, Owner});
v2.push_back(make_shared<Dog>(Name, Blue, Owner))