C++禁止函数拷贝和移动

卡尔的思索 / 2023-05-14 / 原文

#define DISALLOW_COPY(ClassName)     \
  ClassName(const ClassName&) = delete; \
  ClassName& operator=(const ClassName&) = delete
#define DISALLOW_MOVE(ClassName) \
  ClassName(ClassName&&) = delete;  \
  ClassName& operator=(ClassName&&) = delete
#define DISALLOW_COPY_AND_MOVE(ClassName) \
  DISALLOW_COPY(ClassName);               \
  DISALLOW_MOVE(ClassName)
class ClassA final {
 public:
  ClassA(){}
  ~ClassA() {}
  DISALLOW_COPY_AND_MOVE(ClassA);

  void Reset();
  void CopyFrom(const ClassA* src);
  void Swap(ClassA* other);

 private:
  void* buffer_;
  size_t buffer_size_;
};