我有std::vector<Enemy> enemies
。在Enemy
类的构造函数的最后我做enemies.push_back(*this)
,虽然我不确定这是最好的方法,或者我为什么需要指针除了我得到一个错误没有它。
在析构函数期间,我想做类似的事情:
enemies.erase(std::find(enemies.begin(), enemies.end(), *this));
但这并没有太好用。
基本上,当Enemy
被实例化时,我希望它进入enemies
向量,并在被销毁时移除。
答案 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
添加到向量中,因为它是一个指针而你的向量不是由指针组成的。