智慧型指標(二)

2021-07-22 10:56:28 字數 917 閱讀 9759

智慧型指標存在的問題

通過對指標的封裝,讓類可以像指標一樣。這樣的智慧型指標還是存在些問題。之前我們解決了,物件拷貝問題,引入引用技術儲存拷貝次數,當拷貝次數為1時,便可以直接釋放析構物件。現在存在的新的問題是,之前都是用來管理單個物件,那麼如果想管理乙個陣列呢?因此出現了下面的問題:

class aa

void dispaly()

private:

int _a;

};template

class shareptr

~shareptr()

}shareptr(shareptr& s)

:_ptr(s._ptr)

, _pcount(s._pcount)

shareptr& operator=(shareptr& s)

_ptr = s._ptr;

_pcount = s._pcount;

++(*_pcount);

}return *this;

}t& operator*()

t* operator->()

private:

int *_pcount;

t *_ptr;

};void test()

很明顯,**崩潰了。緣何?

把斷點打到 shareptr p1 = new aa[10];//斷點處進去之後可以看到

由於物件析構時,delete刪除的位置不正確,delete從第二個位元組開始刪除,因而崩潰了。

因此出現了sharearray,只要把delete 改為 delete[ ],則可以。

智慧型指標 二 scoped ptr

boost scoped ptr特點 boost scoped ptr的實現和std auto ptr非常類似,都是利用了乙個棧上的物件去管理乙個堆上的物件,從而使得堆上的物件隨著棧上的物件銷毀時自動刪除。不同的是,boost scoped ptr有著更嚴格的使用限制 不能拷貝。這就意味著 boos...

gxx base 二 智慧型指標

gxx base 二 智慧型指標 為什麼要使用智慧型指標?在很多時候,為了提高程式的執行速度,經常需要引用同一記憶體塊,可能多處都用到這一塊記憶體,但不知道什麼時候該釋放,因此引入智慧型指標,對記憶體進行引用計數管理。當有引用時,引用計數自增,當引用結束時,引用計數自減,引用計數變為0時,釋放指標指...

Rust 智慧型指標(二)

rc是引用計數指標,可以使用clone使得指標所指向的資料具有多個所有者。enum list use list use std rc rc fn main 需要注意的是,rc指標的資料是不可變的 refcell指標可以繞過編譯期借用檢查,普通指標和引用同一時間只能有乙個可變引用或者多個不可變引用。而...