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/