看了vczh的共享指針的實現,我大概理解為 用一段共享內存來實現一切。這一段共享內存包含的內容包括:
1,真正的數據
2,4個字節的引用計數
任何指向這段共享內存的指針都有權利修改這段內存的內容,比如
1,當有新指針指向這塊內存的時候,如拷貝構造函數,或是被右值賦值的函數operator =,新的對象都應該去把
共享內存中引用計數加1。注意這里右值被拷貝過來的時候,this是能操作這塊共享內存的,所以計數的加減都
很容易操作的。
2,在當前的指針逃脫這塊共享內存的時候,要把這里的引用計數減1,當減到0的時候,釋放所有的內存。所以operator=
應該是先減去現在的引用計數,再增加新的引用計數
大概的結構如下:
class share_ptr
{
T* pSharedData;
int* pSharedCnt;
};
vczh的文章在這里
http://www.shnenglu.com/vczh/archive/2010/06/24/118635.html