c ++ - 管理向量中的实体

时间:2014-11-24 20:47:43

标签: c++ vector

我有std::vector<Enemy> enemies。在Enemy类的构造函数的最后我做enemies.push_back(*this),虽然我不确定这是最好的方法,或者我为什么需要指针除了我得到一个错误没有它。

在析构函数期间,我想做类似的事情:

enemies.erase(std::find(enemies.begin(), enemies.end(), *this));

但这并没有太好用。

基本上,当Enemy被实例化时,我希望它进入enemies向量,并在被销毁时移除。

2 个答案:

答案 0 :(得分:1)

您可能需要更多地改进这个问题:std :: vector敌人的范围是什么?

回答问题的第一部分:敌人已被宣布为向量而不是指向敌人的指针。这就是你必须通过做&#34; * this&#34;来生成引用的原因。作为push_back()调用的参数。您实际上保留了此向量中构造的所有对象的副本。

这是你的意图还是你的意思是某种注册表,即跟踪创建的所有敌人对象?如果它是您想要的注册表:

请使用std::vector<Enemy*> enemies

请尝试具体说明&#34;并不能很好地解决问题&#34;。

如果你给出更多的背景,我认为人们可以给出更好的答案。

答案 1 :(得分:1)

vector存储对象的副本,因此push_back()存储副本(它不会进入构造函数的循环,因为它使用默认的复制构造函数创建该副本,这将不会执行第二次push_back),这意味着您无意中复制了对象,因此它将无法按预期运行。

另外

  

在Enemy类的构造函数结束时,我做了   enemies.push_back(* this),虽然我不确定这是不是   最好的方式,或者为什么我需要指针除了我得到一个错误   没有它。

this是指向敌人的指针 *this是对敌人的引用

你不能将this添加到向量中,因为它是一个指针而你的向量不是由指针组成的。