關於c 智慧指標shared ptr的一些疑惑

2022-12-16 02:00:10 字數 2700 閱讀 9582

1樓:

不要用自己的方式瞎摸索, 你這都是違規行為,多看看書.

第一種方式資源會自動銷燬.

第二中方式, p = t 沒法通過編譯的.

給你幾條建議:

不要這麼喜歡malloc, 使用new/deleteshared_ptr<>是基於raii思想( resource aquisition is initialization ), 所以你要這樣

share_ptrsp( new int ) 這種方式去初始化智慧指標.

使用sp->這樣方式去引用資源, 而不是raw ptr = sp.get(),

2樓:匿名使用者

這個兩種方式在p的生命週期完成後都會釋放,t都會變成了野指標。

另外這種寫法是有問題的,shared_ptr預設使用delete釋放記憶體,而用malloc生氣的記憶體應該用free釋放。可以改為使用new申請記憶體,或者自定義shared_ptr的刪除函式,改為使用free

3樓:索噶

一切只malloc不free和只new不delete的行為都是耍流氓.

c++,學習shared_ptr智慧指標存在幾個大的疑惑,希望有高手能幫忙解答一下

4樓:匿名使用者

typedef vectorvector_int;

vector_int *tmp = new vector_int;

給tmp賦值

shared_ptrpointer(tmp);

不一定。能保證。

看情況。類似1的情況,則pointer銷燬時,tmp指向的物件被銷燬。

你給的例子相當於用end_connection替換了delete。因為智慧指標不只可以用過來管理記憶體,也可以管理其它資源。管理其它資源的時候,就應該用相應的操作替換new和delete。

5樓:梔暖棠深

所謂的智慧指標。。的智慧方面就是使用完自動刪除掉記憶體

關於智慧指標的問題 auto_ptr c++

6樓:匿名使用者

智慧指標的最主要的作用防止裸指標帶來的很多問題,如指向無效記憶體的指標,或者可能出現的記憶體洩露。

其實我不建議你看這個auto_ptr,因為在實際開發中,很少使用這個,而是使用boost庫的shared_ptr,比auto_ptr更好用,更安全。如果你學會了shared_ptr,自然也會用auto_ptr了。並且vs2010裡已經提供了與boost庫一樣的shared_ptr。

你想知道智慧指標的作用,我給你舉一個反例:

class a

~a()

}如果出現下面的**

a a1;//物件a1

。。。。。。

a a2 = a1;//現在a2和a1相同了,也就意味著a2.ptr 與a1.ptr相同。

。。。。。。

那麼當a1被析構的時候,就會delete掉ptr指向的記憶體,可是目前這個指標還儲存在a2裡,意味著a2中的ptr指向無效的記憶體了,如果a2繼續使用ptr,程式基本就會崩潰了,因為有效的記憶體已被a1析構了。

解決辦法就是把上面的裸指標換成智慧指標,這就是智慧指標可以解決的問題之一。

7樓:

看一下,講的還是比較詳細的

8樓:來自梅花山魅力無限的重瓣梅

工作一年了,從來沒用到過

c++中普通指標和智慧指標之間可以互相轉換嗎

9樓:匿名使用者

當然可以,智慧指標是類,它的建構函式有很多,其中一個就是以普通指標為唯一引數的,通過這個建構函式能實現普通指標到智慧指標的轉換。要注意的是,這個建構函式是explicit的,也就是說,普通指標不能隱式轉換成智慧指標。

至於智慧指標轉普通指標,就更簡單了,呼叫get函式即可。

這裡給出一個例子:

#include

#include //智慧指標的標頭檔案

class test

int data;

};int main()

智慧指標是推薦使用的東西,有了它可以減少new、delete的使用。這裡只介紹它的簡單操作,通常它會和make_shared搭配,而不是直接用new分配記憶體。

c++中有了智慧指標為什麼還要垃圾**器呢 兩者的區別聯絡

10樓:匿名使用者

智慧指標是一種資料型別,包括好幾種,比如shared_ptr, scoped_ptr等等,使用它們可以方便管理記憶體,便於垃圾**器(非自動)**系統資源。具體的機制請檢視相關文件。

而自動垃圾**器是執行環境(比如jvm或.net framework)提供的管理程式,通常會根據有沒有指標指向一塊資源等標準來判斷是否該**。

垃圾**器使用方便,你不用操心記憶體洩露,無效指標啊什麼的,當然代價是可控性降低,伴隨效能降低。

關於c++智慧指標類的問題,求c++大牛解答。

11樓:兔子和小強

你為什麼要弄一個nodeusecount類呢,直接讓node類對一個use資料成員不就可以。如下所示:

template

class node

...};

求通達信指標改為大智慧指標

input n 5,1,20 a1 ref h,n hhv h,2 n 1 b1 filter a1,n c1 backset b1,n 1 d1 filter c1,n a2 ref l,n llv l,2 n 1 b2 filter a2,n c2 backset b2,n 1 d2 filte...

關於c 指標的含義,C 指標定義

在c 中,定義指標變數如你上面所述可以寫成 int a1。此時的a1為一個指標變數,其中可以存放一個int型別的變數的地址,也即所謂的a1即指向對應變數的指標。但是,定義以外的地方,例如程式中用到a1時寫成你上面寫的那個樣子 a1 其表示取a1所指向的地址中存放的內容 也就是說定義int a1,此時...

關於c指標的題,C語言關於指標的一道題。

漫遊靜心 1 定義一個int型二維陣列,會在記憶體中分配一段連續的空間,存放這些數。按照你的定義,是8個數,一個int型是4個位元組,所以你定義的陣列一共佔用了32個位元組,這32個位元組的首地址為 0x0064fd38。2 陣列名是這32位元組的首地址,是一個指標,但是可以理解為被const修飾的...