gpt4 book ai didi

c++ - 在 "Heap"上创建实例

转载 作者:行者123 更新时间:2023-11-30 03:53:00 26 4
gpt4 key购买 nike

我有一个名为 Ship() 的类,它看起来像这样

class Ship()
{
public:
vector<Weapon*> Weapon
void AddWeapon(Weapon*)
}

void MyShip::AddWeapon(Weapon*)
{
Weapons.pushback(Weapon)
}

对于游戏中的每种武器,Weapon 类是一个抽象基类,必须派生自该类。其中之一叫做 Lazer

所以在我的代码中我可以这样做:

int main()
{
Ship MyShip;
Lazer MyLazer;
MyShip.AddWeapon(&MyLazer)
}

如何确保 Weapons 中的 vector 指向的对象不会超出范围?我相信答案是在 heap 上创建实例,但我不知道。

最佳答案

这样的事情是最安全的:

#include <memory>
#include <vector>

struct Weapon {

virtual ~Weapon() = default;
};

struct Lazer : Weapon {

};

class Ship
{
public:
void AddWeapon(std::unique_ptr<Weapon> weapon);

private:
std::vector<std::unique_ptr<Weapon>> _weapons;
};

void Ship::AddWeapon(std::unique_ptr<Weapon> weapon)
{
_weapons.push_back(std::move(weapon));
}

// test

using namespace std;

int main(){
auto ship = std::make_unique<Ship>();
ship->AddWeapon(std::make_unique<Lazer>());

return 0;
}

关于c++ - 在 "Heap"上创建实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30361988/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com