我想让类的对象不可复制,所以我把copy构造函数和operator =放在私有部分。但是,一个类是此类的朋友,因此它可以访问私有方法。将throw异常放在copy构造函数和operator =中以确保不会复制对象是不错的主意?
答案 0 :(得分:6)
使其不可复制的一种方法只是声明复制构造函数,但根本不实现它。如果有人试图使用它,那将在编译时强制发生链接器错误。
class foo
{
private:
foo(const foo&); // not defined
foo& operator=(const foo&); // not defined
};
答案 1 :(得分:3)
@Mysticial回答了这个问题,这个问题通常是在C ++ 03中完成的。但是在C ++ 11中,你可以更好地完成这个任务:
class foo
{
private:
foo(const foo&) = delete;
foo& operator=(const foo&) = delete;
};
=delete
传达foo
不支持复制语义的消息,因为它已通过使用delete
明确标记来禁用。我在这里详细解释了这一点: