【发布时间】:2016-08-03 14:14:05
【问题描述】:
我正在编辑一些开源游戏的代码,通常这些代码不会直接访问玩家或生物类;然而,它的参数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);
}
}
}
【问题讨论】:
-
没有
new(内存分配),为什么要有delete(内存释放)?顺便说一句,指针不会被删除,可以删除由指针给出起始地址的内存块。但是只有动态分配的内存块才能被删除。 -
那么将其设置为 null 怎么样?
-
或者解引用指针,基本上我只是想知道我的做法是否正确。
-
你是什么意思“将其设置为null”??您没有在您发布的代码中设置任何指向 null 的指针。
-
if` 语句中的变量声明是错误的(据我所知,除非 C++ 中有一些新语法)。在
if语句之外(和之前)声明这些变量。
标签: c++ pointers dereference