繁体   English   中英

私有复制构造函数:不允许

[英]a private copy constructor: disallow

我正在一个开源库中进行编程,该库在代码中几乎没有注释,并且绝对没有与代码相关的文档,或者这些注释完全没有显示或完全令人困惑。 库的示例 class 有时定义如下(这是一个抽象的简短示例):

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 默认按位复制构造”将指出这样一个事实,即当我定义一个类型时,我需要定义我自己的复制构造函数以避免编译器为我“生成”一个模棱两可的构造函数。 这是我到目前为止在这个主题上学到的东西。 但在这种情况下,构造函数是私有的,编译会以这种形式中断。

问:有这样的原因吗? 一个私有的复制构造函数? 这个评论意味着什么?

托米斯拉夫

和你说的差不多。 通常,编译器会生成一个复制构造函数。 为了防止这种情况,您可以定义自己的,并将其设为私有。 然后,任何复制构造 class 的尝试都将在编译时失败,而不是默默地做错事。

通常,复制构造函数是私有的,不允许按值传递对象。

我认为编译中断是因为复制构造函数被定义了两次,一次是私有的,一次是公共的。

私有复制构造函数的一个原因可能是防止 A 的实例按值传递或返回。 为什么要这样做是另一回事,我无法回答。

正如您所说,关键是要避免生成默认的复制构造函数,但不仅如此 - 避免实际使用它是private的。 将其设为私有的目的是不允许使用它。

编译中断是因为您有两个复制构造函数,一个是公共的,一个是私有的。 私人复制构造器完全没问题。 他们不允许用户做很多危险的事情。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM