cprover
safe_pointer.h
Go to the documentation of this file.
1 /*******************************************************************\
2 
3 Module: Simple checked pointers
4 
5 Author: Chris Smowton, chris@smowton.net
6 
7 \*******************************************************************/
8 
11 
12 #ifndef CPROVER_UTIL_SAFE_POINTER_H
13 #define CPROVER_UTIL_SAFE_POINTER_H
14 
15 template<class T> class safe_pointer
16 {
17  public:
18  operator bool() const
19  {
20  return !!ptr;
21  }
22 
23  T *get() const
24  {
25  assert(ptr && "dereferenced a null safe pointer");
26  return ptr;
27  }
28 
29  T &operator*() const
30  {
31  return *get();
32  }
33 
34  T *operator->() const
35  {
36  return get();
37  }
38 
40  {
41  return safe_pointer();
42  }
43 
45  T *target)
46  {
47  assert(target && "initialized safe pointer with null");
48  return safe_pointer(target);
49  }
50 
52  T *target)
53  {
54  return safe_pointer(target);
55  }
56 
57  protected:
58  T *ptr;
59 
60  explicit safe_pointer(T *target) : ptr(target)
61  {}
62 
63  safe_pointer() : ptr(nullptr)
64  {}
65 };
66 
67 #endif
T * operator->() const
Definition: safe_pointer.h:34
safe_pointer(T *target)
Definition: safe_pointer.h:60
static safe_pointer< T > create_non_null(T *target)
Definition: safe_pointer.h:44
T & operator*() const
Definition: safe_pointer.h:29
static safe_pointer< T > create_maybe_null(T *target)
Definition: safe_pointer.h:51
static safe_pointer< T > create_null()
Definition: safe_pointer.h:39