gpt4 book ai didi

c++ - 如何删除指向(结构/对象)的指针而不破坏(结构/对象)内部的指针?

转载 作者:太空宇宙 更新时间:2023-11-04 16:26:39 26 4
gpt4 key购买 nike

如果我有一个指向结构/对象的指针,并且该结构/对象包含另外两个指向其他对象的指针,并且我想删除“包含这两个指针的对象而不破坏它所持有的指针”——我该怎么做这样做吗?

指向对象 A 的指针(包含指向对象 B 的指针,包含指向对象 C 的指针)。删除对象 A指向对象 A 的指针被删除,指向对象 B/C 的指针仍然存在。

我必须做些什么才能使这项工作正常进行吗?

更新

这是一个游戏项目,我希望这能解释它。现在,即使将指向 B、C 的两个指针放在第一个 Struct (A) 中,我也遇到了一些“问题”

struct Player
{
char * Name;
Weapon* PlayerWeapon;
Armor* PlayerArmor;
};

struct Weapon
{
char * Name;
int Damage;
};

struct Armor
{
char * Name;
int Resistance;
};

这在某种程度上是行不通的。

Player* CreatePlayer(char * Name, Weapon* weapon, Armor* armor)
{
Player *pPlayer = new Player;

pPlayer->Name = name;
pPlayer->Weapon = weapon;
pPlayer->Armor = armor;
};

之后当玩家“死亡”时,装备不应该被删除。

最佳答案

指针 (A) 中包含的指针 (B & C) 不会被删除,除非您通过析构函数明确地执行此操作。但是一旦删除了指针A,就不能再用指针A访问B&C了。

注意:您应该在 A 类中使用复制构造函数和 = 重载运算符以避免浅复制。

如果您想为其他玩家使用相同的盔甲和武器,请确保您没有删除玩家析构函数中的武器和盔甲。然后你可以像这样对另一个玩家使用相同的指针。

Weapon* weapon = CreateWeapon();
Armor* armor = CreateArmor();

Player* player1 = CreatePlayer("Alpha", weapon, armor);
delete player1;

Player* player2 = CreatePlayer("Beta", weapon, armor);
delete player2;

关于c++ - 如何删除指向(结构/对象)的指针而不破坏(结构/对象)内部的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11152629/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com