objects of parent class 的动态数组保存 child objects
Dynamic array of objects of parent class to hold child objects
我有一个Mammal
parentclass。
Dog
、Cat
、Lion
是 sub-classes.
我正在使用向量将所有 sub-classes 保持为 Mammal
object 如此
vector<Mammal> v;
并使用此行将新的 object 附加到矢量。
v.push_back(new Dog(Name, Blue, Owner));
Apparent只是它不起作用。 Error no instance of overload function
在编译期间抛给我。我是 C++ 新手,所以我不确定动态创建 parent class 数组以保存所有 child object
的正确方法是什么
正如评论中已经提到的,您有一个哺乳动物对象向量,而不是指针或引用。
尝试 -
vector <Mammal *> v;
v.push_back(new Dog(Name, Blue, Owner));
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()
而不是 new,或者使用 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))
我有一个Mammal
parentclass。
Dog
、Cat
、Lion
是 sub-classes.
我正在使用向量将所有 sub-classes 保持为 Mammal
object 如此
vector<Mammal> v;
并使用此行将新的 object 附加到矢量。
v.push_back(new Dog(Name, Blue, Owner));
Apparent只是它不起作用。 Error no instance of overload function
在编译期间抛给我。我是 C++ 新手,所以我不确定动态创建 parent class 数组以保存所有 child object
正如评论中已经提到的,您有一个哺乳动物对象向量,而不是指针或引用。
尝试 -
vector <Mammal *> v;
v.push_back(new Dog(Name, Blue, Owner));
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()
而不是 new,或者使用 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))