簡體   English   中英

何時在游戲開發中使用C ++指針

[英]When to use C++ pointers in game development

我看了很多文章,大多數人講的是同一個故事:除非必須,否則不要使用指針。 來自C#/ Java背景,其中內存全部被管理,我完全不知道什么時候使用指針是合適的,除了這些情況:

  • 動態內存(如可變大小的數組)
  • 多態性

什么時候我會使用指針,特別是在gamedev的上下文中?

“不要使用指針,它們很慢” 沒有意義 (至少在C ++ 中沒有意義 )。

這就像是說“不要使用變量,它們很慢”

  • 你是說,“不要使用動態內存分配 ”?
    如果是這樣的話:我認為你現在不應該擔心。 首先編寫代碼,然后再進行優化。

  • 或者你的意思是說,“不要使用原始指針(即類型為foo* )”,這需要newdelete
    如果是這樣,這是一個很好的建議 :你通常需要智能指針 ,比如shared_ptrunique_ptr來管理對象,而不是處理原始指針。 您不應該在大多數C ++代碼中使用newdelete ,即使這看起來很自然。
    但它們仍然是引擎蓋下的指針!

  • 或者你的意思是其他什么?

附錄

感謝下面的@ bames53指出這一點:

如果通過一個副本是一個選項 (即當你傳遞少量數據,而不是一個巨大的結構或數組可能比一些寄存器較大,例如順序〜16個字節的), 使用指針(或參考)傳遞數據; 而是通過副本傳遞。 它允許編譯器以這種方式更好地進行優化。

指針的一個主要用途(盡管在可能的情況下引用通常更好),是能夠在不復制對象的情況下傳遞對象。 如果一個對象包含大量數據,那么復制它可能非常昂貴且不必要。 在游戲開發方面,您可以將指針存儲在像std::vector這樣的容器中,這樣您就可以管理游戲中的對象。 例如,你可以有一個包含指向游戲中所有敵人的指針的向量,這樣你就可以對它們執行一些“大規模程序”。 考慮智能指針也許是值得的,因為這些可以讓你的生活變得更輕松(它們在防止內存泄漏方面有很大幫助)。

這個想法是你不想讓內存泄漏,也不想在檢索內存時減慢程序,所以,如果你預先分配你需要的結構,那么你可以使用指針傳遞結構,因為比復制結構更快。

我覺得你很困惑為什么指針可能被認為是壞的,因為有很多地方可以使用它們,你只需要考慮你為什么這樣做。

你不需要可變大小數組的指針,你可以(通常應該)使用std::vector 你也不需要用於多態的原始指針; 虛函數與unique_ptr等智能指針一起使用。

在現代C ++中,你很少需要指針。 通常它們會被隱藏在資源擁有的類中,如矢量。 要傳遞對象而不復制它們,您可以使用引用。 指針的大多數剩余用法都被智能指針覆蓋。 很少你會想要一個'非擁有'指針,在這種情況下原始指針是好的。

如果你了解應該使用的東西而不是指針,你將學習指針的適當用法。 因此,了解RAII,參考和smart_pointers。

暫無
暫無

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

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