Q_DISABLE_COPY宏

2020-05-25 15:50:31 浏览数 (1)

❝Q_DISABLE_COPY宏作用是禁止对给定的类使用复制构造函数和赋值运算符。 ❞

Q_DISABLE_COPY作用

「Q_DISABLE_COPY宏作用是禁止对给定的类使用复制构造函数和赋值运算符。」 Q_DISABLE_COPY宏多使用在QObject类或其派生类中。如果我们需要禁止用户复制或赋值类对象,在类内使用Q_DISABLE_COPY宏即可。

  如果某些类内有指针成员变量,那么在复制或赋值很容易时候就会出现浅拷贝问题,当「复制类」的指针成员变量被释放时,「原类」内的指针成员变量再次释放就会导致程序意向不到的后果(二次析构)。

Q_DISABLE_COPY宏源码

  • Qt4版本
代码语言:javascript复制
#define Q_DISABLE_COPY(Class) 
    Class(const Class &); 
    Class &operator=(const Class &);
  • Qt5版本
代码语言:javascript复制
#ifdef Q_COMPILER_DELETE_MEMBERS
# define Q_DECL_EQ_DELETE = delete
#else
# define Q_DECL_EQ_DELETE
#endif

#define Q_DISABLE_COPY(Class) 
    Class(const Class &) Q_DECL_EQ_DELETE;
    Class &operator=(const Class &) Q_DECL_EQ_DELETE;

0 人点赞