class CountAllocDealloc {
  public:
      CountAllocDealloc(int* alloc_count, int* dealloc_count)
          : _alloc_count(alloc_count), _dealloc_count(dealloc_count) {
        (*_alloc_count)++;
      }
      ~CountAllocDealloc() {
        (*_dealloc_count)++;
      }
  private:
    int* _alloc_count;
    int* _dealloc_count;
};

template<typename T>
struct FreePtr {
  void operator()( T * t ) noexcept
  {
    if(t != nullptr) {
      delete t;
      t=nullptr;
    }
  }
};
