簡體   English   中英

C ++ - 通過指針訪問向量元素的安全性

[英]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;
};

每次在單個游戲中,每當玩家進行移動時(即:放置xo ),信息將通過push_back()存儲在vector ,以創建“撤消”功能,該功能目前按預期工作。

在我的undo / redo邏輯的某些部分,我使用遍歷vector函數,找到適當的元素,並直接返回指向該元素的指針。

它是否安全,只要我正確管理vector ,訪問它,將所有指向vector元素的指針vector ,或者存在固有風險? 我擔心的是,如果擴展我計划做的游戲(即:對我正在進行的國際象棋游戲使用相同的代碼),並且vector變得太大而需要自動重新分配,指針將變得無效(即:整個列表被移動到一個新的連續塊可以容納所有的元素),或者是有一些類型的智能指針接口的vector來完成同樣的事情?

謝謝。

你是正確的去關注:如果向量需要成長,在地址vector會改變(或者,如果載體縮小,但大多數實現vector不會不從程序員的一些努力縮小)。

立即簡單的解決方案是將索引返回到向量而不是指針。 只要它在范圍內,它將永遠是找到特定元素的有效方式。 [而不是NULL你可以使用例如-10xDEAD ]

您是否考慮過使用std::stackstd::list 堆棧特別有吸引力,可以簡化您正在尋找的“撤消”功能(因為最后一次移動將始終是堆棧的頂部)。 但是使用鏈接結構,你不需要擔心索引問題,但如果你對內存緊張,他們可能不是最好的選擇......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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