最近工作的內容因為會用到 python,不過因為 python 實在太過自由了,有些特性對於習慣寫 C++的我來說實在有點不好控制,導致寫好的檢查是有可能被使用者繞過去的,舉例來說,確認使用者是否有 licesce 這件事就極度重要。這邊就筆記一些目前有想到的方式
2019年2月24日
[C++] How to Write Reliable Code
這篇只是下面這段演講的整理
How to write more reliable code - Egor Bredikhin - Meeting C++ 2018
投影片
總結來說有以下這幾點
How to write more reliable code - Egor Bredikhin - Meeting C++ 2018
投影片
總結來說有以下這幾點
- Guidelines
- Unit tests
- Code reviews
- Static analysis
- Dynamic analysis
- Mordern C++
2019年2月18日
[C++] pinned_vector - Pointer Invalidation Issue on std::vector
pointer invalidation 在 C++ container 是個滿重要 (但很容易被忽略) 的議題,主要原因在於 C++ container 會自己在 runtime 依據使用情況去調整記憶體使用量。也因此,如果用 pointer 去存取 container 中的東西時有時會遇上 container 因為你的操作 (比方說新增/刪除) 導致既有的 pointer 不再合法 (也就是原本指到的地方已經不再是你原本指向的東西,可能已經變成其他的東西或是不能被存取了),這就是所謂的 pointer invalidation,在 C++ reference 上各個 container 的 member function 其實可以看到會有一段在描述 iterator validity,那個就是在講這個議題。
當然,不同方式的 container 在 pointer validity 會有不同的情況 (比方說 std::list 沒有這問題,但是他的 element 就不會是在連續的記憶體上),選用 std container 的時候其實有一部份是要謹慎考量這問題的,因為這攸關使用情境以及效能。這次在 Meeting C++ 2018 看到的 pinned_vector 簡單來說就是提出一個可以滿足最低限度的 pointer validity 的改良版 std::vector
訂閱:
文章 (Atom)