C++11 禁止copy和assign

C++编译器可以为类生成默认的构造函数,copy构造函数,copy assign操作符和析构函数。但很多时候类只会有一个对象,所以禁掉编译器默认生成的copy构造函数可能会避免一些潜在的问题。

一般我们可以用一个宏来吧copy构造函数和copy assign操作符私有,比如:

DISALLOW_COPY_AND_ASSIGN(Type) \
private:                       \
    Type(const Type&);         \
    Type& operator=(const Type&);
    
class SomeClass
{
public:
    
DISALLOW_COPY_AND_ASSIGN(SomeClass);
};

而在C++11中可以显式的删掉这些构造函数

DISALLOW_COPY_AND_ASSIGN(Type) \
    Type(const Type&) = delete;         \
    Type& operator=(const Type&) = delete;

最后更新于