C++ smart pointer
std::unique_ptr比起自己管理在memory和speed上會有可忽略的overhead
destructor會check pointer是不是nullptr (某些內建釋放的function原本會檢查就變兩次)
如果在scope內自己管理,可能要寫好幾個delete
會增加code size,有可能讓CPU cache miss減低效能
主要優點是程式碼會簡潔多了,也比較不容易出錯
array type要注意用 [],否則deleter是沒有[]的,應該會有memory leak
https://github.com/obsproject/obs-studio/commit/f775070c809b296333dfa1e07643b6fc31938644
改用std::make_shared, std::make_unique 避免使用new是好習慣
用在C或其他的deleter
std::unique_ptr<char, decltype(&std::free)> str(std::malloc(20), &std::free);
GCC extension cleanup attribute (可以給C用)
CLANG好像也有
https://gcc.gnu.org/onlinedocs/gcc/Common-Variable-Attributes.html
https://echorand.me/site/notes/articles/c_cleanup/cleanup_attribute_c.html
MSVC輸出asm的方法,可以比較不同寫法產生的結果
https://docs.microsoft.com/en-us/cpp/build/reference/fa-fa-listing-file
asm的
npad 5 = repeat nop
參考資料
https://herbsutter.com/2013/05/29/gotw-89-solution-smart-pointers/
留言
張貼留言