Caffe2 - C++ API
A deep learning, cross platform ML framework
object_ptr.h
1 #pragma once
2 
3 #include <torch/csrc/utils/python_stub.h>
4 
5 template<class T>
6 class THPPointer {
7 public:
8  THPPointer(): ptr(nullptr) {};
9  explicit THPPointer(T *ptr) noexcept : ptr(ptr) {};
10  THPPointer(THPPointer &&p) noexcept { free(); ptr = p.ptr; p.ptr = nullptr; };
11 
12  ~THPPointer() { free(); };
13  T * get() { return ptr; }
14  const T * get() const { return ptr; }
15  T * release() { T *tmp = ptr; ptr = nullptr; return tmp; }
16  operator T*() { return ptr; }
17  THPPointer& operator =(T *new_ptr) noexcept { free(); ptr = new_ptr; return *this; }
18  THPPointer& operator =(THPPointer &&p) noexcept { free(); ptr = p.ptr; p.ptr = nullptr; return *this; }
19  T * operator ->() { return ptr; }
20  explicit operator bool() const { return ptr != nullptr; }
21 
22 private:
23  void free();
24  T *ptr = nullptr;
25 };
26