原文:std::shared_ptr 的工作原理

前戲 先拋出兩個問題 如果delete一個指針,但是它真實的類型和指針類型不一樣會發生什么 是誰調用了析構函數 下面這段代碼會發生什么有趣的事情 看一下匯編代碼可以看到main函數主要做了下面這幾件事 從匯編中可以看出,構造造函數和析構函數是編譯器根據指針的類型生成的調用代碼。而且編譯器是不允許沒有繼承關系的指針之間進行轉換的,void 是個例外,只要不作死用reinterpret cast把指針 ...

2017-12-28 23:41 0 4528 推薦指數:

查看詳情

C++筆記-std::any、void*和shared_ptr<void>

參考資料: C++17之std::any https://blog.csdn.net/janeqi1987/article/details/100568181 std::any: How, when, and why: https://devblogs.microsoft.com/cppblog ...

Tue Apr 28 20:03:00 CST 2020 0 2198
shared_ptr原理與應用

new與賦值的坑 賦值(assignment)和new運算符在C++與Java(或C#)中的行為有本質的區別。在Java中,new是對象的構造,而賦值運算是引用的傳遞;而在C++中,賦值運算符意味着 ...

Sat Mar 01 09:54:00 CST 2014 1 4438
判斷std::shared_ptr是否為空

想判斷一個shared_ptr是否為空,去http://en.cppreference.com/w/cpp/memory/shared_ptr鏈接找了接口函數,未發現接口判斷是否為空。 最后發現很簡單,可以直接用if判斷來實現。經@egmkang指出是重載了operator bool ...

Tue Sep 11 02:07:00 CST 2012 3 10832
std::shared_ptr使用方法和注意事項

1.創建 有三種方式,分別為構造函數、std::make_shared<T>輔助函數和reset方法 1.1構造函數 就像普通的類一樣,需要在定義變量的時候,使用new 對象作為輸入參數。但是這種方法需要兩次申請內存空間,第一次是new,第二是智能對象本身需要申請的內存 ...

Wed Nov 18 22:20:00 CST 2020 0 2326
巧用std::shared_ptr全局對象釋放單例內存

巧用std::shared_ptr 單例的使用相對比較廣泛,但是需要在程序退出前調用它的析構函數對數據進行釋放,常規做法是在main函數末尾進行釋放工作, 但是這樣相對比較繁瑣,因此便有了利用全局變量由系統負載析構的特點,定義一個全局str::shared_ptr對象,對象指定對單例進行析構 ...

Tue Aug 28 02:01:00 CST 2018 1 1143
 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM