【发布时间】:2021-07-04 17:31:21
【问题描述】:
在 SFML 中,我试图创建一个游戏,并创建了一个 Bullet 类,我在其中放置了一个析构函数。我想在按下按钮时摧毁子弹,但是当我按下它时,我的窗口冻结了,pc kina 崩溃了。有什么方法可以破坏对象吗?我已经试着不画了,但它还在那里,只是看不见。
if (sf::Keyboard::isKeyPressed(sf::Keyboard::E)) bullet1.~Bullets();
the error after the program crashes
【问题讨论】:
-
几乎没有充分的理由手动调用析构函数。最好的方法是将
bullet1放入可以从中删除的某种容器中,例如std::vector或std::optional。Bullet被销毁后做了什么工作? -
在您的问题中提供一些minimal reproducible example,并花更多时间阅读有关 C++ 和 SFML 的信息
-
请注意,如果您刚刚开始学习 C++,SFML 显然不是一个很好的库。它假定您熟悉许多高级和细微的 C++ 功能,如果您搞砸了,它不会帮助您。来自SFML FAQ:
"don't start with SFML if you are trying to grasp the basic language features of C++" -
bullet1.~Bullets();这会使对象未初始化,任何使用它的尝试都会导致未定义的行为。显式的析构函数调用很少是个好主意,但如果你必须这样做,那么至少要让对象保持一致的状态,例如在析构函数以重新初始化对象。
标签: c++ class sfml destructor