我正在一个开源库中编程,它在代码中只有很少的注释,并且绝对没有代码相关的文档,或者这些注释完全没有显示或者完全令人困惑。库的示例类有时定义如下(这是一个抽象的简短示例):
class A
{
private:
// Disallow default bitwise copy construct.
A (const A& Acopy) { data = Acopy.data; };
int data;
public:
A() {};
A (int arg) : data(arg) {};
A(const A& Acopy) { data = Acopy.data; };
};
在私有复制构造函数前面的注释“Dissalow默认按位复制构造”会指出这样一个事实:当我定义一个类型时,我需要定义自己的复制构造函数以避免一个“由编译器模糊地为我生成。这是我到目前为止在这个主题上学到的。但在这种情况下,构造函数是私有,并且编译以此形式中断。
问:这样的事情有原因吗?私有的复制构造函数?这个评论意味着什么?Tomislav
答案 0 :(得分:9)
这几乎意味着你所说的。通常,编译器会生成一个复制构造函数。为了防止这种情况,您可以定义自己的,并将其设为私有。然后,任何复制构造类的尝试都将在编译时失败,而不是默默地做错事。
答案 1 :(得分:2)
通常,复制构造函数是私有的,以禁止按值传递对象。
答案 2 :(得分:2)
我认为编译会中断,因为复制构造函数定义了两次,一次是私有的,一次是公共的。
私有拷贝构造函数的原因可能是阻止按值传递或返回A的实例。为什么人们想要这样做是另一回事,我无法回答。
答案 3 :(得分:2)
正如你所说的那样,重点是避免生成默认的复制构造函数,但不仅如此 - 它是private
以避免实际使用它。将其设为私有的重点是不允许使用它。
答案 4 :(得分:0)
编译中断,因为您有两个复制构造函数,一个是public,一个是private。私人复制建设者完全没问题。他们不允许用户可以做的许多危险的事情。