【发布时间】:2015-02-27 16:52:57
【问题描述】:
以下宏是否有任何问题导致类不可复制?
#define PREVENT_COPY(class_name) \
class_name(const class_name&) = delete;\
class_name& operator=(const class_name&) = delete;
class Foo
{
public:
PREVENT_COPY(Foo)
// .......
};
【问题讨论】:
-
您的宏的第一行似乎缺少连续斜杠。
-
“他们对使类不可复制的以下宏有任何问题吗?” 是的,这会使您的代码对其他人不可读(不太可靠)。
-
@abelenky,移动对象与复制对象不同。 拥有移动构造函数的部分目的是允许移动无法复制的东西(例如
std::unique_ptr)。 -
@πάντα ῥεῖ 我不同意,它比您不想复制的每个类的主体中的一堆已删除函数/tors 更具可读性。
-
我不明白,将复制构造函数和赋值 declarations 放在
private部分(没有任何实现)应该可以防止复制。= delete需要什么?
标签: c++ c++11 c-preprocessor noncopyable deleted-functions