1 struct __shared_count { __shared_count__shared_count2 __shared_count() { _M_pi = new int; } 3 int * _M_pi; 4 }; 5 template<typename _Tp> 6 class __shared_ptr { 7 public: 8 __shared_ptr(_Tp* __p); reset(int * __p)9 void reset(int * __p) { 10 __shared_ptr(__p).swap(*this); 11 } swap(__shared_ptr<_Tp> & __other)12 void swap(__shared_ptr<_Tp>& __other) { 13 __other._M_refcount._M_pi = _M_refcount._M_pi; 14 } 15 __shared_count _M_refcount; 16 }; 17 template<typename _Tp> class shared_ptr : public __shared_ptr<_Tp> {}; main()18int main() { 19 for (shared_ptr<int> *iter;;) 20 { 21 try { 22 (iter++)->reset(new int); 23 } 24 catch (...) { 25 } 26 } 27 } 28