Sam*_*lMS 3 c++ google-style-guide c-preprocessor c++11
我已经在他们的C++样式指南中使用谷歌的DISALLOW_COPY_AND_ASSIGN宏几个月了,但最近我发现,额外禁用移动构造函数和移动赋值会很有用.
我之前没有写过任何真正的宏(实际上,我一直试图尽可能远离它们),所以我想从其他人那里得到一些关于我是否实现它的反馈正确.
// Original Version
#define DISALLOW_COPY_AND_ASSIGN(TypeName) \
TypeName(const TypeName&); \
void operator=(const TypeName&)
// Modified Version (no move semantics)
#define DISALLOW_COPY_MOVE_AND_ASSIGN(TypeName) \
TypeName(const TypeName&); \
void operator=(const TypeName&); \
TypeName(TypeName&&); \
void operator=(const TypeName&&)
Run Code Online (Sandbox Code Playgroud)
建议和批评是非常受欢迎的.
谢谢你的时间!
Die*_*ühl 13
如果已经有声明的复制构造函数或复制赋值,则无需禁用移动构造函数或移动赋值:如果既没有复制构造函数也没有声明复制赋值赋值,则移动构造函数和移动赋值仅隐式声明为默认值.班级.将宏用于此目的似乎是安全的.
但是,可能的变化可能是将复制构造函数和复制赋值显式声明为delete
d:
#define DISALLOW_COPY_AND_ASSIGN(TypeName) \
TypeName(TypeName&) = delete; \
void operator=(TypeName) = delete;
Run Code Online (Sandbox Code Playgroud)
这样,复制构造函数和复制赋值既不能从类的成员调用,也不能定义它们.
在C++中(从2011版本开始)我看不出这个宏中的任何一点:delete
显式构造函数似乎很容易.