1// Copyright (C) 2005, 2009 Free Software Foundation 2// 3// This file is part of the GNU ISO C++ Library. This library is free 4// software; you can redistribute it and/or modify it under the 5// terms of the GNU General Public License as published by the 6// Free Software Foundation; either version 3, or (at your option) 7// any later version. 8 9// This library is distributed in the hope that it will be useful, 10// but WITHOUT ANY WARRANTY; without even the implied warranty of 11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12// GNU General Public License for more details. 13 14// You should have received a copy of the GNU General Public License along 15// with this library; see the file COPYING3. If not see 16// <http://www.gnu.org/licenses/>. 17 18// TR1 2.2.2 Template class shared_ptr [tr.util.smartptr.shared] 19 20#include <tr1/memory> 21#include <testsuite_hooks.h> 22 23struct A { }; 24struct B : A { }; 25 26// 2.2.3.5 shared_ptr observers [tr.util.smartptr.shared.obs] 27 28// use_count 29int 30test01() 31{ 32 bool test __attribute__((unused)) = true; 33 34 const std::tr1::shared_ptr<A> p1; 35 VERIFY( p1.use_count() == 0 ); 36 const std::tr1::shared_ptr<A> p2(p1); 37 VERIFY( p1.use_count() == 0 ); 38 39 return 0; 40} 41 42int 43test02() 44{ 45 bool test __attribute__((unused)) = true; 46 47 std::tr1::shared_ptr<A> p1(new A); 48 std::tr1::shared_ptr<A> p2(p1); 49 p1.reset(); 50 VERIFY( p1.use_count() == 0 ); 51 VERIFY( p2.use_count() == 1 ); 52 53 return 0; 54} 55 56int 57test03() 58{ 59 bool test __attribute__((unused)) = true; 60 61 std::tr1::shared_ptr<A> p1(new A); 62 std::tr1::shared_ptr<A> p2(p1); 63 p2.reset(new B); 64 VERIFY( p1.use_count() == 1 ); 65 VERIFY( p2.use_count() == 1 ); 66 67 return 0; 68} 69 70 71int 72main() 73{ 74 test01(); 75 test02(); 76 test03(); 77 return 0; 78} 79