C++ 复制构造函数和运算符中的不可复制对象和异常=
我想使类的对象不可复制,所以我把copy构造函数和operator=放在private部分。然而,有一个类是这个类的朋友,所以它可以访问私有方法。在copy构造函数和operator=中放置throw exception是否是一个好主意,以确保对象不会被复制?使其不可复制的一种方法是只声明复制构造函数,但根本不实现它。如果有人试图使用链接器,这将在编译时强制执行链接器错误C++ 复制构造函数和运算符中的不可复制对象和异常=,c++,exception,C++,Exception,我想使类的对象不可复制,所以我把copy构造函数和operator=放在private部分。然而,有一个类是这个类的朋友,所以它可以访问私有方法。在copy构造函数和operator=中放置throw exception是否是一个好主意,以确保对象不会被复制?使其不可复制的一种方法是只声明复制构造函数,但根本不实现它。如果有人试图使用链接器,这将在编译时强制执行链接器错误 class foo { private: foo(const foo&); // not defined
class foo
{
private:
foo(const foo&); // not defined
foo& operator=(const foo&); // not defined
};
@Mystical已经回答了这个问题,这通常是在C++03中完成的。但在C++11中,您可以更好地执行此操作:
class foo
{
private:
foo(const foo&) = delete;
foo& operator=(const foo&) = delete;
};
=delete
表示foo
不支持复制语义,因为它已通过显式标记delete
被禁用。我在这里详细解释了这一点: