C++ 从内部破坏结构

C++ Destroying struct from inside of it

本文关键字:结构 内部 C++      更新时间:2023-10-16

所以我有一个结构项目符号:

struct Bullet {
int posX; int posY;
int verticalBulLimiter = 0;
int verticalBulLimiterCheck = 35; // aka movement Speed
void draw() {
gotoxy(posX,posY);
setColor(14);
cout << bullet << endl;
if (posY - 1 == 0){
/// I want to delete struct here
}
if (verticalBulLimiter == verticalBulLimiterCheck) {
posY--;
clearPixel(posX, posY + 1);
verticalBulLimiter = 0;
}
else {
verticalBulLimiter++;
}
}
};

如您所见,一旦变量 posY 达到某个值,我想删除该结构。 那我该怎么做。我是否尝试使用关键字"this",但我真的不知道它是如何工作的。有没有"自我毁灭"的功能?

虽然这可以使用delete this,但它绝对不是你想要的。

C++中的对象通常不拥有自己,因此您应该让项目符号的所有者(可能是场景或世界实体(将其删除。

与其尝试"从内部销毁结构",不如检查并删除满足某些条件的结构实例。 有一种算法就是这样做的,就像这样。

#include <vector>
struct Bullet { ... };
std::vector<Bullet> bullets;
void clean_bullets(){
bullets.erase(
std::remove_if(bullets.begin(), bullets.end(),
[](const Bullet& i){return /* your condition when a bullet should be removed */}),
v.end()
);
}

int main(){
// Add some bullets
bulltes.push_back({/* create a bullet here */});
.
.
.
clean_bullets();
}

std::vector<Bullet> bullets包含所有项目符号,并负责记忆,删除,添加元素等。

您可以在此处阅读有关std::vector的更多信息:https://en.cppreference.com/w/cpp/container/vector

关于删除上述元素,它被称为删除/擦除成语 https://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Erase-Remove