2014-11-24 27 views
1

我有一個std::vector<Enemy> enemies。在Enemy類的構造函數的最後,我做了enemies.push_back(*this),雖然我不確定這是最好的方法,還是真的爲什麼我需要指針,除此之外,如果沒有它,我會得到一個錯誤。C++ - 管理向量中的實體

在析構函數,我想這樣做:

enemies.erase(std::find(enemies.begin(), enemies.end(), *this)); 

但是,這並沒有真正工作了太清楚了。

基本上,當一個Enemy被實例化時,我希望它進入enemies向量,並在被銷燬時刪除。

+3

聽起來像是你想要'std :: vector '而不是。 – cdhowie 2014-11-24 20:48:49

+0

謝謝,我沒有永遠這樣做過。 – 2014-11-24 20:50:44

+0

我懷疑你爲什麼要管理每個'Enemy'對象(或其衍生的衍生對象)的**副本向量**可能會暴露一個更基本的設計問題。這可能與建議一樣簡單;首先簡單地使用錯誤的類型。 – WhozCraig 2014-11-24 21:06:08

回答

1

您可能需要再細化一下問題:std :: vector敵人的範圍是什麼?

要回答問題的第一部分:敵人已被宣佈爲向量而不是指向敵人的指針。這就是爲什麼您必須通過將「* this」作爲push_back()調用的參數來生成引用。你有效地保留了在這個向量中構造的所有對象的副本。

這是你的意圖還是你的意思是它是某種類型的註冊表,它跟蹤所有創建的敵人對象?如果它是您想要的註冊表:

請使用std::vector<Enemy*> enemies

請嘗試具體說明「不太好」。

我想人們可以給出更好的答案,如果你給一點更多的上下文。

1

vector複製對象的,所以push_back()存儲副本(只因爲它使用默認的拷貝構造函數來創建複製它不進入的構造函數的循環,這不會做第二個push_back),這意味着你無意中複製了對象,所以它不會像預期那樣工作。

而且

敵人類的構造函數結束時,我做 enemies.push_back(*此),但我真的不知道這是 最好的辦法,還是真的我爲什麼需要指針除了我得到一個錯誤 沒有它。

this是一個指向敵人
*this是那個敵人

參考您不能添加this的載體,因爲它是一個指針,你的載體不是由指針。