一个私有的复制构造函数:disallow

a private copy constructor: disallow

本文关键字:复制 构造函数 disallow 一个      更新时间:2023-10-16

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

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 default bitwise copy construct"指出,当我定义一个类型时,我需要定义自己的复制构造函数,以避免编译器为我"生成"一个模糊的复制构造函数。这是我迄今为止在这个话题上学到的东西。但在这种情况下,构造函数是private,编译以这种形式中断。

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

Tomislav

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

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

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

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

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

编译中断,因为您有两个副本构造函数,一个是公共构造函数,一一个是私有构造函数。私人副本管理员完全可以。他们不允许用户做许多危险的事情