gpt4 book ai didi

c++ - 这个类的析构函数是什么样的?

转载 作者:太空宇宙 更新时间:2023-11-04 12:25:31 25 4
gpt4 key购买 nike

class Equipment
{
std::vector<Armor*> vEquip;
Weapon* mainWeapon;
int totalDefense;
int totalAttack;

public:

unsigned int GetWeight();

int * GetDefense();

bool EquipArmor(Armor* armor);
bool UnequipArmor(Armor* armor);

bool EquipWeapon(Weapon* wep);
bool UnequipWeapon(Weapon* wep);

Equipment();
virtual ~Equipment();
};

看来不应该有析构函数。指针 vector 在超出范围时会自行处理,指针指向的实际对象不需要删除,因为会有其他引用指向它。

这里的所有对象都是指主容器:

class Container
{
int weightLimit;
unsigned int currWeight;
std::vector<Item*> vItems;

public:

bool AddItem(Item* item);
bool RemoveItem(Item* item);

Container();
Container(int weightLim);
Container(int weightLim, std::vector<Item*> items);
~Container();
};

现在我可以看到有必要删除容器中的所有对象,因为这是通过 AddItem(new Item("Blah")) 分配所有对象的地方

(盔甲和武器继承自元素)

最佳答案

非指针类型会照顾好自己。因此,整数、 float 、对象等会自行处理,您不必担心删除它们。

任何由该类管理的指针都需要被该类的析构函数删除。因此,如果指针指向的内存是在类中分配的,或者如果它是本着由类管理它的想法提供给类的,那么析构函数需要删除指针。

如果指针指向另一个类正在管理的内存,那么您显然不希望析构函数删除它。这是负责该指针指向的内存的类的工作。

标准容器管理它们持有的指针(如果它们持有指针)。所以,如果你有一个指针容器,无论哪个类应该管理它们都需要删除它们。很可能这是保存容器的类,但这取决于您的代码在做什么。

因此,通常情况下,对于具有指针容器的类,您需要在析构函数中使用如下内容:

for(containerType<T*>::iterator iter = container.begin(),
end = container.end();
iter != end;
++iter)
{
delete *iter;
}

每个分配有内存的指针都必须有一些东西(通常是一个类,但有时是分配它的函数)有效地拥有该内存并确保它被释放。当谈论类时,通常是分配内存的同一个类,但当然,一个类或函数很可能分配内存,然后有效地将内存的所有权传递给另一个类或函数。无论如何,无论谁“拥有”内存,都需要清理它。这就是您的析构函数需要担心的事情:清除该类拥有的所有资源。

关于c++ - 这个类的析构函数是什么样的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2716041/

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