[英]C++ - Safety of accessing element of vector via pointers
在我的C ++項目中,我使用一個vector
來保存一堆struct
,這些struct
包含一些簡單游戲的元素(即:tic-tac-toe,coordinates, x
vs o
等)。 即:
struct gameMove
{
int x;
int y;
int player;
int order;
};
每次在單個游戲中,每當玩家進行移動時(即:放置x
或o
),信息將通過push_back()
存儲在vector
,以創建“撤消”功能,該功能目前按預期工作。
在我的undo / redo邏輯的某些部分,我使用遍歷vector
函數,找到適當的元素,並直接返回指向該元素的指針。
它是否安全,只要我正確管理vector
,訪問它,將所有指向vector
元素的指針vector
,或者存在固有風險? 我擔心的是,如果擴展我計划做的游戲(即:對我正在進行的國際象棋游戲使用相同的代碼),並且vector
變得太大而需要自動重新分配,指針將變得無效(即:整個列表被移動到一個新的連續塊可以容納所有的元素),或者是有一些類型的智能指針接口的vector
來完成同樣的事情?
謝謝。
你是正確的去關注:如果向量需要成長,在地址vector
會改變(或者,如果載體縮小,但大多數實現vector
不會不從程序員的一些努力縮小)。
立即簡單的解決方案是將索引返回到向量而不是指針。 只要它在范圍內,它將永遠是找到特定元素的有效方式。 [而不是NULL
你可以使用例如-1
或0xDEAD
]
您是否考慮過使用std::stack
或std::list
? 堆棧特別有吸引力,可以簡化您正在尋找的“撤消”功能(因為最后一次移動將始終是堆棧的頂部)。 但是使用鏈接結構,你不需要擔心索引問題,但如果你對內存緊張,他們可能不是最好的選擇......
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.