改造一下标准库里的share指针
// 需要一个结构体保存计数器和裸指针 templatestruct Conptr { T * ptr; unsigned int Counter; }; template class shared_ptr { public: Conptr * ptr; // 允许通过 () 或者 = 传入指针 shared_ptr(T *aptr){ ptr = new Conptr ; ptr->ptr = aptr; ptr->Counter = 1; } // 允许复制构造 shared_ptr(const shared_ptr & aptr){ ptr = aptr->ptr; ptr->Counter ++; } ~shared_ptr(){ ptr->Counter --; if(ptr->Counter == 0){ delete ptr->ptr; delete ptr; } } T * const operator -> (){ return ptr->ptr; } // 禁止循环构造 shared_ptr & operator = (shared_ptr & aptr) = delete; // 禁止生成裸指针 shared_ptr() = delete; // 通过get()得到值,而不是指针 T & get(){ return * (ptr->ptr); } }; class test{ public: test(){std::cout<<"create an obj of the test class";} ~test(){std::cout<<"delete the obj";} }; int main(){ shared_ptr ptr = new int; ptr.get() = 10; std::cout << ptr.get(); shared_ptr ptr2 = ptr; { shared_ptr tp = new test; } auto test_for_function [&](const shared_ptr & p){ share_ptr t = p; return t; } shared_ptr tp2 = test_for_function(); ptr2 = ptr; // error shared_ptr ptr3; // error }