1 2 #include <iostream> 3 #include <util/misc/autovec.h> 4 5 using namespace sc; 6 7 class A { 8 int me; 9 static int nA; 10 public: A()11 A() { 12 me = nA++; 13 std::cout << "A::A (" << me << ")" << std::endl; 14 } ~A()15 ~A() { 16 std::cout << "A::~A (" << me << ")" << std::endl; 17 } 18 }; 19 20 int A::nA = 0; 21 22 void expect(const std::string & m)23expect(const std::string &m) 24 { 25 std::cout << "expect " << m << ": "; 26 } 27 main()28main() 29 { 30 auto_vec<double> double_data(new double[4]); 31 double_data.release(); 32 33 { 34 expect("A::A (0)"); 35 auto_vec<A> a(new A[1]); 36 auto_vec<A> b(a); 37 expect("A::~A (0)"); 38 b.reset(); 39 } 40 41 { 42 expect("A::A (1)"); 43 auto_vec<A> a(new A[1]); 44 expect("A::A (2)"); 45 auto_vec<A> b(new A[1]); 46 expect("A::~A (2)"); 47 b = a; 48 expect("A::~A (1)"); 49 b.reset(); 50 } 51 52 { 53 expect("A::A (3)"); 54 auto_vec<A> a(new A[1]); 55 expect("A::~A (3)"); 56 } 57 58 { 59 expect("A::A (4)"); 60 auto_vec<A> a(new A[1]); 61 auto_vec<A> b(a.release()); 62 expect("A::~A (4)"); 63 } 64 65 { 66 expect("A::A (5)"); 67 auto_vec<A> a(new A[1]); 68 expect("A::A (6)"); 69 A *ap = new A[1]; 70 expect("A::~A (5)"); 71 a.reset(ap); 72 expect("A::~A (6)"); 73 } 74 75 return 0; 76 } 77