#pragma once
#includeusing namespace std;
//原理:資源的轉移 解決的問題:釋放指標
//缺陷:如果乙個指標通過拷貝構造和賦值運算子過載將管理的空間交給其他指標,則原指標是沒有辦法訪問這塊空間了
#if 0
templateclass autoptr
autoptr(autoptr& ap)
:_ptr(ap._ptr)
autoptr& operator=(autoptr& ap)
return *this;
} t& operator*()
t* operator->()
~autoptr()
} private:
t* _ptr;
};#endif
#if 0
//多新增乙個bool型別的變數,用於對空間絕對擁有權的標記
templateclass autoptr
} autoptr(const autoptr& ap)
:_ptr(ap._ptr)
, _owner(ap._owner)
autoptr& operator=(const autoptr& ap)
return *this;
} ~autoptr() }
t& operator*()
t* operator->()
private:
t* _ptr;
mutable bool _owner;//對空間絕對擁有權的標記
};void funtest()
#endif
#if 0
//scopedptr(unique_ptr):同一塊空間只能供乙個物件運用,乙個物件只能由乙個物件管理
//原理:防止拷貝建構函式和賦值運算子過載拷貝物件,就不會引起多個物件共同管理同一塊空間
//做法:將拷貝建構函式和賦值運算子過載放入到私有成員列表中
//問題:不能夠呼叫拷貝建構函式和賦值運算子過載對物件進行拷貝
templateclass scopedptr
~scopedptr() }
t& operator*()
t* operator->()
/*private:
scopedptr(const scopedptr& sp)
{} scopedptr& operator=(const scopedptr& sp)
*/private:
scopedptr(const scopedptr& sp);
scopedptr& operator=(const scopedptr& sp);
private:
t* _ptr;
};#endif
#if 0
//定製刪除器 給使用不同方式開闢記憶體空間的指標,定製與其相匹配的釋放方式的相關函式
//函式指標
void fclose(file* fp)
templatevoid free(t* p)
}templatevoid delete(t* p)
}typedef void(*pfd)(void*);
templateclass scopedptr
~scopedptr()
/*if (_ptr)
*/} t& operator*()
t* operator->()
/*private:
scopedptr(const scopedptr& sp)
{} scopedptr& operator=(const scopedptr& sp)
*/private:
scopedptr(const scopedptr& sp);
scopedptr& operator=(const scopedptr& sp);
private:
t* _ptr;
pfd _defdestory;
};#endif
//偽函式:設定不同型別釋放方式的類 傳參的時候以便識別型別
templateclass defdes
};templateclass free
}};class fclose
}};template>
class scopedptr
~scopedptr() }
t& operator*()
t* operator->()
/*private:
scopedptr(const scopedptr& sp)
{} scopedptr& operator=(const scopedptr& sp)
*/private:
scopedptr(const scopedptr& sp);
scopedptr& operator=(const scopedptr& sp);
private:
t* _ptr;
};void funtest()
智慧型指標實現
namespace smart smart count 增加引用計數,並返回計數值.intaddref 減少引用計數,並返回計數值.intrelease private 計數變數.intuse count 智慧型指標.template class t class smart ptr 構造空指標.ex...
實現智慧型指標
資源的轉移不推薦使用。舊庫使用擁有者會導致野指標 實現 template class autoptr autoptr autoptr ap ptr ap.ptr autoptr operator autoptr ap return this autoptr t getptr const t getp...
智慧型指標的實現
使用c 實現乙個智慧型指標,如下 template class t class smartptr public size t countptr smartptr t p smartptr const smartptr src smartptr operator const smartptr src ...