如何在类的私有部分中为复制构造函数定义原型,以防止在C ++中复制类
答案 0 :(得分:1)
每当您传递非临时对象或具有值的对象时,它都会尝试使用可访问复制构造函数来创建对象。一旦明确删除 C++11 或放入私有/受保护的部分,就无法从外部访问,从而导致编译错误时间,因此让你意识到无法复制。
此类不是 Copy-Construtible 。
答案 1 :(得分:1)
在C ++中,类的private
部分中的成员函数只能由同一个类的其他成员函数调用。 (同样,protected
成员可以由派生类调用,任何人都可以调用public
成员。)
要复制对象,您需要一个复制构造函数。如果你不编写自己的,那么编译器将为你提供一个。但是,如果你做编写自己的,那么通常的访问规则将适用。因此,如果您将复制构造函数的定义放在类的private
部分中,那么编译器将会看到有一个具有正确签名的构造函数(因此它不会为您提供一个),但后来抱怨说它不能称之为它,因为它是私人的。
回到旧的C ++ 98天,这是防止复制类的常用方法。 C ++ 11有一个更好的方法:你说
struct MyType
{
MyType(const MyType&) = delete;
};
明确地告诉编译器"我没有提供这个功能,也没有为我生成它的功能"。这与定义私有拷贝构造函数具有相同的效果,但为尝试复制该类的任何人提供了更好的错误消息。