[英]Using delete on pointers in a a vector
我是一個業余編碼員,正在嘗試通過在控制台上制作文本RPG游戲來學習。 我只是想考慮一下現在如何設計我的代碼,而我陷入了項目和庫存類如何協同工作的困境。 我有這樣定義的庫存類:
class Inventory {
private:
vector<Item*> items;
public:
Inventory() {
items.resize(10);
for (int i = 0; i < 10; ++i) {
items[i] = nullptr;//so I can still display an empty inventory
}
};
~Inventory() {
for (int i = 0; i < 10; ++i) {
delete items[i];
}
}
void AddItem(Item* item) {
for (int i = 0; i < items.size(); ++i) {
if (items[i] == nullptr) {//if the slot is empty
items[i] = item;
break;
}
}
}
void Show() const {
for (int i = 0; i < items.size(); ++i) {
cout << "Slot " << i + 1 << ": ";
if (items[i] == nullptr) {
cout << "<Empty Slot>" << endl;
} else {
cout << "<" << items[i]->GetName() << ">" << endl;
}
}
}
};
最終,我計划讓敵人死后掉落戰利品,因此我需要使用new
創建物品,然后將其轉移到玩家的物品欄中。 我的問題是,我應該只是學習智能指針並使用它們,還是我所說的刪除方法還可以還是完全愚蠢? 還是我應該以不同的方式考慮這種代碼結構? 如果您願意,感謝您的回答! 我真的很感激。
正確的方法是使用迭代器。 不要在其中傳遞“ Item”的指針
void AddItem(Item * item)方法。
您應該創建“ Item”類的迭代器,並將該迭代器傳遞給“ AddItem”方法。 類似地,創建另一個方法“ RemoveItem”,該方法返回可以發送到Player的“ CollectMoney”方法的“ Item”迭代器。
如果不想使用迭代器,則也可以使用“ Item * item”,但是必須調用方法“ RemoveItem”來獲取“ Item”的引用,以便可以將其傳遞給Player。 由於沒有在類內部創建項目,因此不應在類中將其刪除,因此請刪除析構函數。
PS使用此構造函數-> Inventory(){items.resize(10,nullptr);}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.