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