1. 程式人生 > >C++智慧指標shared_ptr使用例項

C++智慧指標shared_ptr使用例項

被new/delete折磨過之後,才能真正體會智慧指標有多好用。

智慧指標是用於管理指標的類。
其中shared_ptr是專門管理那些可能被多個地方用到的指標的類。

C++11中智慧指標的標頭檔案是:

#include <memory>

shared_ptr有什麼用?

我們知道new和delete是需要一一對應的。
但是,有太多的情況誘惑我們一不小心就將一個指標“到處散”了。
這下基本就已經註定new和delete無法一一對應了。要麼,沒有delete,導致記憶體洩漏;要麼,多個地方delete了,導致重複釋放(一般報錯:“段錯誤”、“bad access”之類)。
諷刺的是,誘惑我們將一個指標到處散的可能是“為了節省記憶體”(避免“重複”建立類似的物件)

shared_ptr就是為了解決這個問題:
一坨空間大家用,沒人用了就釋放。

shared_ptr將相當於這坨空間的“管家”,大家都可以用這坨空間,而且大家無需考慮在用完這坨空間之後要不要釋放。因為,沒人在使用這坨空間時,“管家”會將這坨空間釋放。

shared_ptr怎麼用?

指標是怎麼用的?

1int* a = new int(1);
2, int* func(int* b){}

從程式碼上看,只需要做兩處替換:

shared_ptr<int>”替換“int*”
“make_shared<int>”替換“new int

然後就可以像一般使用指標那樣進行操作了。

如上“兩處替換”程式碼舉例如下:

std::shared_ptr<Cone> CreateConeShape() {

    /*此處省略若干行*/
    return std::make_shared<Cone>(o2w, w2o, reverseOrientation, height, radius, phimax);
}
shared_ptr<Grid> Robot = make_shared<Grid>(make_shared<Mesh>());
inline void
FM_SV_GlossySpecular::set_cs
(shared_ptr<Texture> t_ptr) { cs = t_ptr; }

相關推薦

C++智慧指標shared_ptr使用例項

被new/delete折磨過之後,才能真正體會智慧指標有多好用。 智慧指標是用於管理指標的類。 其中shared_ptr是專門管理那些可能被多個地方用到的指標的類。 C++11中智慧指標的標頭檔案是: #include <memory>

C++智慧指標shared_ptr講解與使用

手動管理的弊端 在簡單的程式中,我們不大可能忘記釋放 new 出來的指標,但是隨著程式規模的增大,我們忘了 delete 的概率也隨之增大。在 C++ 中 new 出來的指標,賦值意味著引用的傳遞,當賦值運算子同時展現出“值拷貝”和“引用傳遞”兩種截然不同的語義

C++ 智慧指標shared_ptr模板實現原理

C++ 智慧指標shared_ptr通過引用計數來管理指向的物件,不需要人工釋放 這篇博文主要是講解了智慧指標的實現原理,怎麼實現引用計數 #include <iostream> using namespace std; namespace shao_sma

【轉載】C++ 智慧指標shared_ptr/weak_ptr)原始碼分析

發現一篇對C++11智慧指標分析很透徹的文章,特轉載備忘! 以下轉載自:https://blog.csdn.net/ithiker/article/details/51532484?utm_source=blogxgwz1   C++11目前已經引入了unique_ptr, shared_pt

c++11: 智慧指標 shared_ptr & unique_ptr

一、背景 1. 堆記憶體、棧記憶體、靜態區記憶體 我們知道,靜態記憶體用來儲存區域性 static 物件、類 static 資料成員以及定義在函式之外的變數。而棧記憶體用來儲存定義在函式內的非 static 物件。 分配在靜態區或棧記憶體中的物件由編譯器自動建立和銷燬,對於棧

C++智慧指標shared_ptr,uniqe_ptr,weak_ptr

動態記憶體 在C++中,動態記憶體的管理是通過一對運算子來完成的:new和delete。 new:在動態記憶體中為物件分配空間,並返回一個指向該物件的指標 delete:接受一個動態物件的指標,銷燬該物件,並釋放與之關聯的記憶體 動態記憶體的使用需要十分小心,因為要在程式設計的時候要

C++Boost庫學習之智慧指標 shared_ptr

目錄 1.共享指標shared_ptr ^   使用例子 ^ #include<boost/shared_ptr.hpp> using namespace boost; using std::cout; using std::endl; str

C++ 智慧指標(unique_ptr, shared_ptr)的原始碼分析

shared_ptr 標頭檔案 template <typename T> class SharedPointer { public: SharedPointer(T *ptr = nullptr, const std::function<void

C++ 智慧指標shared_ptr/weak_ptr)原始碼分析

C++11目前已經引入了unique_ptr, shared_ptr, weak_ptr等智慧指標以及相關的模板類enable_shared_from_this等。shared_ptr實現了C++中的RAII機制,它不僅僅具有一般指標(build-in/raw)的特性,更重要的是它可以自動管理使用者

C++11--智慧指標shared_ptr,weak_ptr,unique_ptr

共享指標 shared_ptr /*********** Shared_ptr ***********/ // 為什麼要使用智慧指標,直接使用裸指標經常會出現以下情況 // 1. 當指標的生命長於所指的資源:野指標 // 2. 當指標的生命短於所指的資源:資源洩漏 // // 智慧指標: 確保指標和資源的生

C++利用智慧指標shared_ptr實現物件池

         C++中用new來分配物件,還要顯式的呼叫delete來析構物件,很容易造成記憶體洩露。所以在研究我們遊戲伺服器的程式碼的時候發現,我們將new函式封裝,在物件池上,利用shared_ptr的特性來自動釋放物件,同時實現了一種簡單的GC回收物件的機制。看完

C++:智慧指標shared_ptr

1.智慧指標 C++中用new來動態分配記憶體,delete手動釋放記憶體來達到動態管理記憶體的目的。因為保證在正確的時間釋放記憶體是非常困難的,忘記釋放記憶體就會產生記憶體洩露。 為了更安全、便捷的使用動態記憶體,C++11標準庫提供了新的智慧指標類來管理

記一次由於智慧指標shared_ptr迴圈引用而產生的C++記憶體洩漏

自從 C++ 11 以來,boost 的智慧指標就被加入了 C++ 新標準之中。其中,廣為人知的 shared_ptr 被用的最多,以引用計數的方式來管理指標指向資源的生命週期。看起來有了智慧指標後,C++ 程式再也不用擔心記憶體洩漏了,就可以像 Java 一樣

c++智慧指標(三)之shared_ptr和new結合使用

shared_ptr和new結合使用 我們除了使用make_shared來初始化一個智慧指標,還可以使用new返回的指標來初始化智慧指標。 shared_ptr<int> p1(new int(42));//p1指向一個值為42的int sh

C++ 智慧指標的一個實現(基於模板和Shared_ptr

自己實現了一個C++的智慧指標。 基於Shared_ptr來實現,支援預設構造,拷貝構造,移動構造, 引用計數器, 注意智慧指標中存放的指標地址一旦被一個智慧指標物件託管以後,不要再直接拿此地址來初始化其他物件,否則會引發多次洩漏的問題。(所以還是要特別小心) 如果要初始化

1.1 c/c++智慧指標

c/c++智慧指標 (直接上程式碼) template <typename T> class sharePtr { public: sharePtr() { instance_ = new T(); } ~sharePtr() { delete instan

C++ 智慧指標詳解

C++ 智慧指標詳解   一、簡介 由於 C++ 語言沒有自動記憶體回收機制,程式設計師每次 new 出來的記憶體都要手動 delete。程式設計師忘記 delete,流程太複雜,最終導致沒有 de

C++ 智慧指標(一)

  記憶體安全     在C++中,動態記憶體的管理是通過一對運算子來完成的:new,在動態記憶體中為物件分配空間並返回一個指向該物件的指標,我們可以選擇對物件來進行初始化;delete,接收一個動態物件的指標,銷燬該物件,並釋放與之關聯的記憶體。   動態記憶體的使用很容易出問題,因為確保

智慧指標shared_ptr的實現

#include <iostream> using namespace std; template <class T> class smart { public: smart() = default; smart(T* ptr = nullptr):_ptr(

C++智慧指標的簡單剖析

導讀 最近在補看《C++ Primer Plus》第六版,這的確是本好書,其中關於智慧指標的章節解析的非常清晰,一解我以前的多處困惑。看開源的C++專案時,也能隨處看到智慧指標的影子。 下面是我在看智慧指標時所做的筆記,希望能夠解決你對智慧指標的一些困擾。 目錄 智慧指標背後的