如何在向量中包含派生类型
How to contain derived types in a vector?
我正在用C++制作一个游戏,我希望我的game类能容纳所有的GameObjects。它有一个抽象基本GameObject类的向量,但为了保持派生类型,它必须是指向GameObject:的指针向量
// Game.h
class Game {
private:
std::vector<GameObject*> gameObjects;
public:
void addGameObject(GameObject* gameObject) {
gameObjects.push_back(gameObject);
}
}
当我想将GameObjects添加到向量中时,就会出现问题。当我将指针传递给addGameObject时,指针在另一个作用域中变为NULL。因此,我希望指针存储在向量中,但之后不会立即变为NULL。我不知道该怎么解决这个问题。有什么想法吗?
编辑:谢谢大家的评论。我使用C++已经有一段时间了,但我对使用指针还很陌生,还没有完全理解它们。我知道你需要使用它们来创建包含派生对象的向量。我想我需要更多地研究指针。
"当我想将GameObject添加到向量中时,就会出现问题。当我将指针传递给addGameObject时,指针在其他范围中变为NULL。"
我不知道为什么这些指针在另一个作用域中变成NULL
,因为您没有提到足够的上下文来证明这一点。
但我认为更好的选择似乎是使用像这样的智能指针
// Game.h
class Game {
private:
std::vector<std::shared_ptr<GameObject>> gameObjects;
public:
void addGameObject(std::shared_ptr<GameObject> gameObject) {
gameObjects.push_back(gameObject);
}
}
智能指针有更多的选择,这取决于它们的实际用例,即std::unique_ptr<GameObject>
或std::weak_ptr<GameObject>
。
std::shared_ptr<GameObject>
(或其他提到的智能指针变体)应该很好地用于从GameObject
类派生的实例,例如
class Player : public GameObject {
// ...
};
这将管理对GameObject
实例的引用,因为它们正在使用中,或者在任何范围内都拥有。
相关文章:
- 如果基类包含双指针成员,则派生类的构造函数
- 链表包含 c++ 中不同的派生类对象
- 派生的 wxPanel 控件如何访问其中包含 wxDialog 中的数据?
- 派生自嵌套在类模板中的类模板,所有这些都包含在类模板中
- 如何从包含基类指针的容器中调用派生类函数(基于其类型)?
- 在C++中,为什么仅包含与其基类实例的联合的派生类占用的内存多于联合的大小?
- 如果我在不同的类中包含基类,是否也会包含该基类的派生类
- 如果派生类仅包含自动变量成员,是否有必要具有虚拟驱动器
- 在派生类的成员联合中包含继承的基类成员
- 无法返回包含派生指针的向量
- 包含派生类型的指针的基类
- 如何制作一个既可以包含基类又可以包含派生类的列表
- C++:向量可以<Base>包含派生类型的对象吗?
- 如何在向量中包含派生类型
- DFM:派生形式包含派生位图
- 包含派生对象的QPointer和基类不匹配
- 从DLL加载派生类时不包含派生属性
- 如果我只知道C++中的基类,如何包含派生类
- c++基类包含派生类的实例
- 指向基类的指针数组,其中包含派生类的对象和重载<<运算符