標籤:引用計數 智能指標
#include <iostream>using namespace std;template<typename Type>class auto_ptr_{public: auto_ptr_(Type *t = NULL) :ptr(t), count(new int(1)) { } auto_ptr_(const auto_ptr_& at) :ptr(at.ptr), count(at.count)//先將count指向at的count。 { count[0]++;//然後對count+1,因為多了一個對象對原對象的指向。 } auto_ptr_& operator=(const auto_ptr_ &at) { if (this != &at) { if (ptr == at.ptr)return *this;//如果他們都指向同一個對象就直接返回。 else { realse();//否則先釋放他對原來對象的擁有。 ptr = at.ptr;//重新分配一個對象。 count = at.count;//計數指向所指對象。 count[0]++;//計數加1。 } } return *this; } ~auto_ptr_() { realse(); } Type* operator->() { return ptr; } Type& operator*() { return *ptr; }private: void realse() { if (--count[0] == 0) { cout << "free" << endl; delete []count; if (ptr != NULL) { delete[] ptr; } } }private: int *count; Type *ptr;};int main(){ int *a = new int(1); auto_ptr_<int> ps(a); cout << *ps << endl; return 0;}
C++引用計數智能指標