→ firejox: 這樣設計的意義是什麼04/09 07:37
我是想說這樣比較直覺?就是一個=比較有那種右邊POD都要賦值給左邊的感覺。
→ firejox: 要這樣做就用setXX()來取代copy assignment 就好了04/09 07:41
→ firejox: copy assignment 直接delete04/09 07:42
我有想過這,但如果之後myStruct又多了數個MyUniquePtr的話,那這個setXX介面要頻繁的
更改增加更多參數。所以在想有沒有辦法能把uniquePtr賦值的部分交給用的人來做
※ 編輯: mmmmei (174.160.86.171 美國), 04/09/2024 09:52:30
→ lycantrope: 只能copy不能move 那為何要unique_ptr04/09 13:27
我不太懂這句話意思,是指為什麼不用shared_ptr還是指不用傳統指針嗎?
我也不太懂只能copy不能move這個結論哪裡來的,能麻煩細說一下嗎?感謝
※ 編輯: mmmmei (174.160.86.171 美國), 04/09/2024 14:43:20
→ firejox: operator的語意要越明確越好,不要有做一半的04/09 15:12
→ firejox: copy就copy,move就move。做一半只是變得更難維護而已04/09 15:33
嗯嗯合理,我的需求看來只是要copy POD而已,uniq_ptr不動,這樣用opeator看來不恰當
推 chchwy: unique_ptr 不允許 copy,因為不能有多個擁有者04/09 19:16
→ chchwy: 所以你在一個允許copy的struct裡面放unique_ptr04/09 19:17
→ chchwy: 本身就非常違和04/09 19:17
了解了解,那這opeator看來就不該出現可用
→ sarafciel: 你的設計讓人困惑的點在於,所有的東西你都只要半套而04/10 00:07
→ sarafciel: 已,你想要pod style,但你塞unique_ptr的那一刻他就不04/10 00:07
→ sarafciel: 是pod了,你用unique_ptr卻不打算按move跟ownership的04/10 00:07
→ sarafciel: 規則來玩,你想要做copy assignment,但你在做的事也只 04/10 00:07
→ sarafciel: 有一部分的copy,剩下來那一部分要不要copy要使用者自04/10 00:07
→ sarafciel: 己去弄,老實說,這應該沒有比較直覺XD 04/10 00:07
確實是都半套而已,好吧看來確實只是我一廂情願而已,之後別人用的話應該反而覺得很不
直覺
推 wulouise: 為什麼要user給值?你不能直接deep copy就好?是說如果 04/10 02:02
Emmm因為其實只想要copy其他POD,unq_ptr是會另外操作
→ wulouise: 要能copy為什麼不乾脆不要用unique_ptr直接用aggregate 04/10 02:02
→ wulouise: type04/10 02:02
→ wulouise: 比如強迫該type一定要trivial copyable04/10 02:03
→ wulouise: 我覺得繼承unique_ptr這個設計也有點怪,你想要可以copy04/10 02:05
→ wulouise: 的uniq_ptr用意到底是什麼...refactor舊code?04/10 02:05
其實也不是非要copy,只是希望在外面用的時候(例子裡的s1=s2)時,可以直接用operato
r=(我個人"覺得"看起來比較直覺啦)
感謝各位提供意見,看來我原本這想法本身是很反語言設計邏輯的,總之我的UniquePtr就
是該繼續delete掉copy assignment不該使用對吧?
那現在原帖問題變成: 有什麼比較優雅的方式能夠在MyStruct中,把所有trivially_copy
able的POD值都複製過去?(unique_ptr會另外賦值)
因為若另外定義一個function “copyPOD()”,生怕若之後MyStruct有多新的field,會忘
記加在copyPOD裡。
※ 編輯: mmmmei (17.213.209.49 美國), 04/10/2024 04:56:37
推 Dracarys: 優雅的方式:Reflection? 04/10 09:44
推 Dracarys: 怕之後少加field的話,可以看一下X macro pattern 04/10 09:47
嗯嗯謝謝關鍵字,我也有試了下確實可行(缺點只是macro又臭又長)
推 wulouise: 規定所有人把放在trivially copyable的東西統統放MyStru04/10 09:59
→ wulouise: ct::mPod裡面,複製的時候只複製mPod 04/10 09:59
→ wulouise: 很遺憾你不能阻止人亂塞但code review可以定他04/10 10:00
嗯嗯謝謝,這個看起來也符合設計邏輯,缺點只是現有那些field都要多加個.mPod.
推 sarafciel: 像樓上講的一樣,你可以把pod的部分包一個struct04/10 23:34
→ sarafciel: 然後這裡可以考慮用繼承做: 04/10 23:35
嗯嗯謝謝,這跟aggregate看起來各有千秋,感覺就是使用時機不太同?但看起來也挺優雅
的
推 wulouise: 樓上的做法不錯,不過我習慣aggregate 04/11 22:08
※ 編輯: mmmmei (17.213.209.49 美國), 04/12/2024 05:07:58