smartPointer.hpp
1 #ifndef MARIAN_SMARTPOINTER_HPP
2 #define MARIAN_SMARTPOINTER_HPP
3 
4 namespace marian {
8  template< class T>
9  class SmartPointer {
10  public:
14  data_ptr_ = 0;
15  }
16 
19  SmartPointer(const T& inner) {
20  data_ptr_ = inner.clone();
21  }
22 
26  if (data_ptr_ != 0)
27  delete data_ptr_;
28  }
29 
32  SmartPointer(const SmartPointer<T>& original) {
33  if (original.data_ptr_ != 0) {
34  data_ptr_ = original.data_ptr_->clone();
35  } else {
36  data_ptr_=0;
37  }
38  }
39 
43  if (this != &original) {
44  if (data_ptr_ != 0) {
45  delete data_ptr_;
46  }
47  data_ptr_ = (original.data_ptr_ != 0) ? original.data_ptr_->clone() : 0;
48  }
49  return *this;
50  }
51 
54  T& operator*() {
55  return *data_ptr_;
56  }
57 
60  const T& operator*() const {
61  return *data_ptr_;
62  }
63 
66  T* operator->() {
67  return data_ptr_;
68  }
69 
72  const T* operator->() const {
73  return data_ptr_;
74  }
75 
78  bool isEmpty() const {
79  if (data_ptr_) {
80  return false;
81  }
82  return true;
83  }
84 
85  private:
86  T* data_ptr_;
87  };
88 } // namespace marian
89 #endif
bool isEmpty() const
Check if pointer owns any object.
Definition: smartPointer.hpp:78
SmartPointer & operator=(const SmartPointer< T > &original)
Assignment operator.
Definition: smartPointer.hpp:42
T & operator*()
Method dereferencing pointer.
Definition: smartPointer.hpp:54
SmartPointer(const T &inner)
Constructor.
Definition: smartPointer.hpp:19
T * operator->()
Method dereferencing pointer.
Definition: smartPointer.hpp:66
Template of deep-coping smart pointer.
Definition: smartPointer.hpp:9
Definition: backwardKolmogorovEq.cpp:5
const T & operator*() const
Method dereferencing pointer.
Definition: smartPointer.hpp:60
~SmartPointer()
Destructor.
Definition: smartPointer.hpp:25
T * data_ptr_
Pointer to data owned by pointer.
Definition: smartPointer.hpp:86
SmartPointer()
Default constructor.
Definition: smartPointer.hpp:13
const T * operator->() const
Method dereferencing pointer.
Definition: smartPointer.hpp:72
SmartPointer(const SmartPointer< T > &original)
Copy constructor.
Definition: smartPointer.hpp:32