value_ptr_test_3.cc
Go to the documentation of this file.
1 #include "cetlib/value_ptr.h"
2 
3 #include <cassert>
4 #include <memory>
5 
6 class simple_base {
7  int i;
8 
9  simple_base(simple_base const& s) : i(s.i)
10  {
11  ++n_alive;
12  ++n_born;
13  }
14 
15 public:
16  static int n_alive;
17  static int n_born;
18 
19  simple_base() : i(0)
20  {
21  ++n_alive;
22  ++n_born;
23  }
24  explicit simple_base(int j) : i(j)
25  {
26  ++n_alive;
27  ++n_born;
28  }
29 
30  virtual simple_base*
31  clone() const
32  {
33  return new simple_base(*this);
34  }
35 
36  virtual ~simple_base() { --n_alive; }
37 
38  bool
39  operator==(simple_base const& o) const
40  {
41  return i == o.i;
42  }
43  bool
44  isSame(simple_base const& o) const
45  {
46  return &o == this;
47  }
48 
49 }; // simple_base
50 
51 int simple_base::n_alive = 0;
52 int simple_base::n_born = 0;
53 
54 int
56 {
57  assert(simple_base::n_alive == 0);
58  {
60  assert(simple_base::n_alive == 1);
62  assert(simple_base::n_alive == 2);
63 
64  assert(*a == *b);
65  assert(a->isSame(*b) == false);
66  } // a and b destroyed
67  assert(simple_base::n_alive == 0);
68 
69  {
70  std::unique_ptr<simple_base> c(new simple_base(11));
71  std::unique_ptr<simple_base> d(new simple_base(11));
72  simple_base* pc = c.get();
73  simple_base* pd = d.get();
74  assert(pc != 0);
75  assert(pd != 0);
76 
77  cet::value_ptr<simple_base> e(c.release());
78  assert(c.get() == 0);
79  assert(*d == *e);
80  assert(e.operator->() == pc);
81 
83  if (f)
84  assert(0);
85  else {
86  }
87  f.reset(d.release());
88  assert(d.get() == 0);
89  assert(*e == *f);
90  assert(f.operator->() == pd);
91  if (f) {
92  } else
93  assert(0);
94 
95  assert(simple_base::n_alive == 2);
96  assert(simple_base::n_born == 4);
97  }
98  assert(simple_base::n_alive == 0);
99  assert(simple_base::n_born == 4);
100 }
simple_base(simple_base const &s)
const double e
const double a
bool isSame(simple_base const &o) const
static int n_alive
virtual ~simple_base()
virtual simple_base * clone() const
static bool * b
Definition: config.cpp:1043
int main()
static int n_born
static QCString * s
Definition: config.cpp:1042
bool operator==(simple_base const &o) const