熟練了 C,被 C++把世界觀搞崩壞了
我不敢說我很理解 C 當中的語法,水準也就給 linux kernel 寫寫 patch,會修補一下 gtk+程式。
因為最近工作的關係,要開始用 C++ 剛開始的時候特別不理解 template 的用法,後來發現只是一個限制很多的 macro,當然很複雜的用處還是不懂。
smart pointer 的 concepts 花了很多時間才明白。
- 第一是 c++對 type 的要求非常嚴格,類似在 C 中 void *這樣的儲存是絕對不允許的。
- 也是搞不懂上面講的 template,一直不懂怎麼在 wrapper class 當中放下那麼多型別的資料,後來才發現需要依賴類似 std::variant 這樣的方法。
- ownership 的控制,什麼時候可以用一下 raw pointer 不是什麼地方都要堅持只能用新的 smart pointer
- 對 class destructor 的要求,我之前不知道 C++ compiler 會幫忙填充 vtable 和進行 offset 換算的工作,這在 glib 中原本都是要手寫。
上面這些明白以後,發現還是可能要在在 wrapper class 的 declare 前把那些存進來的 class 的 declare 全部導入進來,不隱私而去拖慢編譯速度。繼續問人之後發現,只需要在 wrapper class 做 customize operator= 和 desructor 即可。又發現一件事不明白
- 對 compiler 的行為不理解,特別是 object 的處理行為
等別人手把手寫給我用例後,我不是很理解反正就先開始用了。 我今天在問如何生成 instance 並加入 smart pointer 列管的時候,得知了 RVO 這樣的東西,而不是保留在 C 當中的習慣使用 pointer
在 c++很多時候應該使用 by value or by refer 。這讓我完全混亂了,不知道究竟 pointer 還有什麼意義。本來 C 當中有 pointer 完全是因為 performance issue 。而 c++ compiler 竟然會知道幫你改成 pointer copy 。