复制构造函数和operator =中不可复制的对象和异常

时间:2011-10-14 05:56:56

标签: c++ exception

我想让类的对象不可复制,所以我把copy构造函数和operator =放在私有部分。但是,一个类是此类的朋友,因此它可以访问私有方法。将throw异常放在copy构造函数和operator =中以确保不会复制对象是不错的主意?

2 个答案:

答案 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明确标记来禁用。我在这里详细解释了这一点: