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/

留言

這個網誌中的熱門文章

OBS 抓不到畫面, 視窗, 遊戲擷取, 黑或白畫面, 當掉 ,卡住, black/white screen, window game capture, crash, freeze

優化實況(一) OBS設定 streaming settings

OBS plugin obs-text 顯示播放中音樂, display playing music