【发布时间】:2010-04-27 03:11:26
【问题描述】:
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();
};
似乎不应该有析构函数。指针向量超出范围时会自行处理,指针指向的实际对象不需要删除,因为会有其他引用。
这里所有的对象都是指主容器:
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")) 分配所有对象的地方
(盔甲和武器继承自物品)
【问题讨论】:
-
1. “会有其他的参考。”那么其他引用的所有者如何知道何时可以安全地删除对象呢?
-
mainWeapon是 C++ 指针(相对于更智能的指针)。析构函数应该负责释放。如果您希望指针处理分配和释放,请使用Boost::shared_ptr或scoped_ptr。智能指针向量没有问题,但是析构函数应该在销毁向量之前释放向量中所有指针使用的内存。
标签: c++