私有拷贝构造函数:disallow

时间:2011-06-10 07:47:15

标签: c++ constructor copy-constructor

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

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

5 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:2)

通常,复制构造函数是私有的,以禁止按值传递对象。

答案 2 :(得分:2)

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

私有拷贝构造函数的原因可能是阻止按值传递或返回A的实例。为什么人们想要这样做是另一回事,我无法回答。

答案 3 :(得分:2)

正如你所说的那样,重点是避免生成默认的复制构造函数,但不仅如此 - 它是private以避免实际使用它。将其设为私有的重点是不允许使用它。

答案 4 :(得分:0)

编译中断,因为您有两个复制构造函数,一个是public,一个是private。私人复制建设者完全没问题。他们不允许用户可以做的许多危险的事情。