智慧型指標存在的問題通過對指標的封裝,讓類可以像指標一樣。這樣的智慧型指標還是存在些問題。之前我們解決了,物件拷貝問題,引入引用技術儲存拷貝次數,當拷貝次數為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指標可以繞過編譯期借用檢查,普通指標和引用同一時間只能有乙個可變引用或者多個不可變引用。而...