gpt4 book ai didi

c++ - vector 中存储的对象,它们何时被销毁?

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

正在开发一个小型角色扮演游戏战斗系统,以练习面向对象的代码。我有一个 Party 类,它有一个 vector 来存储可变数量的党员。

初始化我的派对并添加一名成员似乎效果很好。我什至可以调用成员的 take_damage() 函数来更改成员的生命值,这似乎也有效。

但是当我在下一行使用 hp getter 检查同一成员的 hp 时,它又回到了开始的地方。

我为成员类创建了一个析构函数以查看发生了什么,根据输出,该对象被多次销毁。这是为什么?

class Member
{
private:
int hp;

public:
Member() { hp = 1; }
~Member() { std::cout << "DESTROYED!!" << std::endl; }
int get_hp() { return hp; }
void take_damage(int amt) { hp += amt }
};

class Party {
private:
std::vector<Member> members;

public:
void add_member(Member memb) { members.push_back(memb); }
Member get_member(int num) { return members[num]; }
};

int main() {
Party p;
Member m;

p.add_member(m);

std::cout << p.get_member(0).get_hp() << std::endl;
p.get_member(0).take_damage(4);
std::cout << p.get_member(0).get_hp() << std::endl;
}

最佳答案

您的 get_member 方法返回数组元素的拷贝,而不是对它的引用。返回引用,成员将被修改。

Member& get_member(int num) { return members[num]; }

关于c++ - vector 中存储的对象,它们何时被销毁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57863982/

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