簡體   English   中英

在向量中對指針使用刪除

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM