删除另一个方法中的多个指针 class
Delete mulitple pointers in a method of another class
我正在编辑开源游戏的一些代码,通常代码不会直接访问玩家或生物 class;但是它的参数Cylinder
在所有事情上都处于食物链的顶端。
我的问题是我应该删除所有这些指针还是在完成它们后将它们设置为 NULL
?
这是我写的代码;它工作正常,但我不想让服务器因悬垂指针(对 C++ 来说仍然有点新)等问题而崩溃。
bool Game::removeMoney(Cylinder* cylinder, uint64_t money, uint32_t flags /*= 0*/)
{
if (cylinder == nullptr) {
return false;
}
if (money == 0) {
return true;
}
if (Creature *creature = cylinder->getCreature()) {
if (Player *player = creature->getPlayer()) {
uint64_t cash = player->getBankBalance();
if (cash < money) {
return false;
}
player->setBankBalance(cash - money);
}
}
return true;
}
void Game::addMoney(Cylinder* cylinder, uint64_t money, uint32_t flags /*= 0*/)
{
if (Creature *creature = cylinder->getCreature()) {
if (Player *player = creature->getPlayer()) {
player->setBankBalance(player->getBankBalance() + money);
}
}
}
delete
仅当您从游戏中获取 Cylinder
对象时调用 new
时才需要。可能没有,但你需要检查代码。
设置为 NULL
是您在指向的对象已被删除(或有被删除的风险)时执行的操作。这只是以确保以后不会意外使用无效指针。
一般情况下(除非文档另有说明),如果传递给您的是指针,请不要 delete
对象。假设您没有被授予该对象的所有权。
现代 C++ 帮助您避免需要知道您是否被赋予所有权:您可能被赋予 std::shared_ptr<Cylinder>
或 std::unique_ptr<Cylinder>
- 无论哪种方式,当智能指针时,都会为您处理删除超出范围。但通常情况下,您不得不使用无法给您这样的保证的图书馆。
无需清空在小范围内使用的任何指针(例如函数)。如果您将指针变量保留更长时间(也许在成员变量中),那么这样做可能有助于防止事故发生。由于 C++ 不是一种垃圾回收语言,因此将即将超出范围的空指针置零没有任何好处。
我正在编辑开源游戏的一些代码,通常代码不会直接访问玩家或生物 class;但是它的参数Cylinder
在所有事情上都处于食物链的顶端。
我的问题是我应该删除所有这些指针还是在完成它们后将它们设置为 NULL
?
这是我写的代码;它工作正常,但我不想让服务器因悬垂指针(对 C++ 来说仍然有点新)等问题而崩溃。
bool Game::removeMoney(Cylinder* cylinder, uint64_t money, uint32_t flags /*= 0*/)
{
if (cylinder == nullptr) {
return false;
}
if (money == 0) {
return true;
}
if (Creature *creature = cylinder->getCreature()) {
if (Player *player = creature->getPlayer()) {
uint64_t cash = player->getBankBalance();
if (cash < money) {
return false;
}
player->setBankBalance(cash - money);
}
}
return true;
}
void Game::addMoney(Cylinder* cylinder, uint64_t money, uint32_t flags /*= 0*/)
{
if (Creature *creature = cylinder->getCreature()) {
if (Player *player = creature->getPlayer()) {
player->setBankBalance(player->getBankBalance() + money);
}
}
}
delete
仅当您从游戏中获取 Cylinder
对象时调用 new
时才需要。可能没有,但你需要检查代码。
设置为 NULL
是您在指向的对象已被删除(或有被删除的风险)时执行的操作。这只是以确保以后不会意外使用无效指针。
一般情况下(除非文档另有说明),如果传递给您的是指针,请不要 delete
对象。假设您没有被授予该对象的所有权。
现代 C++ 帮助您避免需要知道您是否被赋予所有权:您可能被赋予 std::shared_ptr<Cylinder>
或 std::unique_ptr<Cylinder>
- 无论哪种方式,当智能指针时,都会为您处理删除超出范围。但通常情况下,您不得不使用无法给您这样的保证的图书馆。
无需清空在小范围内使用的任何指针(例如函数)。如果您将指针变量保留更长时间(也许在成员变量中),那么这样做可能有助于防止事故发生。由于 C++ 不是一种垃圾回收语言,因此将即将超出范围的空指针置零没有任何好处。