如何把握 C 智慧型指標 的使用顆粒度?

時間 2021-05-30 04:25:28

1樓:storyhare

1、能用unique_ptr的地方,盡量只用unique_ptr。

2、使用shared_ptr時,其持有型別不要含有shared_ptr欄位。

3、容器個人不建議使用智慧型指標。

2樓:蔡鵬

用過很長一段時間objective-c,檢稱oc。oc裡面的strong指標就類似於shared_ptr。oc裡面指標不是strong就是week,模擬喻c++的話,所有的指標你用shared_ptr或者week_ptr就可以。

c++多了種場景,有一種類資源是獨一無二的,就用unique來修飾就好。

3樓:

某個entity包含component應該是vector>。因為看這樣的設計一般都是entities會共享一些component吧,直接shared_ptr。

全域性的話實際上可以直接儲存物件,但是entity很可能有多種,也就是存在繼承,這樣的話要存不同的entity也應該用shared_ptr。

如果為了效能原因要去優化掉shared_ptr,要搞清楚生命週期與所有權,然後有一些就可以直接用裸指標了。

4樓:Xi Yang

我認為關鍵在於明晰物件所有權:

某物件永遠只屬於另乙個物件,直接持有。

否則引用計數。

實際上,對於複雜到一定程度的物件,複製和移動的代價可能都不小,這時候你幾乎總是應當持有它們的指標,除非物件絕對不共享。

那麼:1:你的元件如果需要被多個「整體」持有,不一定是綁死在某乙個上面,那就用引用計數指標。

2:其實你的vector裡就應當存智慧型指標。應當是std::vector>

3:如果你的物件能保證永遠和全域性持有者同生共死,你的全域性持有者就可以直接持有例項。否則引用計數指標。

5樓:

一般都是std::vector>要好,擴容時複製的記憶體長度也少一些,還可以支援不同子型別的Components。

同時有如下建議:

Component自定義構造器以保證連續的記憶體布局ps. Entirety。。感覺還是寫成Entity吧……

6樓:

同意 @vczh 的回答。

另外想補充一句,盡量不要弄全域性的物件,很容易帶來初始化順序的問題。如果實在要用,就弄個返回靜態物件引用的方法。

智慧型指標的正確實踐

翟思 在我們的企業,也遇到類似的問題。所以講講自己的案例,不代表所有企業。如果直接回答樓主的問題,小公司是應該流程化的。看了詳細描述,我覺得樓主可能混淆了兩件事。那就是小公司應該流程化和小公司能夠流程化嗎?我們作為一家創業企業,從幾個人到十幾個人現在到50餘人,已經深深的感覺到流程化不足帶來的問題。...

C 中如何定義指向函式指標的指標?

zr scat 瀉藥先定義乙個函式指標 typedef void pfn void 再定義指向函式指標的指標 void print void pfn func print pfn ptr func 在c 11下,可以這麼偷懶獲得型別 1 include 23using namespace std 4...

c語言中指標指向的非指標變數不能使用 或 嗎

大灰灰老師 學術概念上不太正確 關於 unary 的定義 但實際上是對的解釋 C語言中,所有 unary operator 單目運算子,優先順序都是有著 left to right associativity 的比 right to left 的高,即放在被操作量右邊的先算。例如 p 先算右邊的 s...