繁体   English   中英

复制构造函数应该是私有的还是公共的

[英]Should copy constructor be private or public

我正在编写一个抽象类,它将成为其他几个类的父类。 我认为复制构造函数应该是私有的,因为你使用的是抽象类,没有什么可以复制的。 但是,我不是100%肯定。

我是否正确,如果我不是为什么要公开或受到保护?

如果您不希望复制类的对象,则复制构造函数应该是私有的。 否则,它应该是公开的。

我认为protected是最好的选择:它决定对象是否可以复制到派生类,同时禁止在抽象类级别进行复制,防止可怕的对象切片

通过将复制构造函数设置为私有,您将有助于防止无意中的对象切片,其中您创建派生类的副本但会丢失该派生类的所有属性。 派生类可以创建自己的公共副本构造函数并做正确的事情。

当抽象类具有数据成员时,有一种情况应该保护复制构造函数而不是私有。 这种情况不会经常发生。 基类可以复制基类成员,而派生类复制自己的成员。

class AbstractBase
{
public:
    AbstractBase(const std::string &init) : wtf(init) {}
    virtual ~AbstractBase() {}
    void DoSomething() = 0;
protected:
    AbstractBase(const AbstractBase &r) : wtf(r.wtf) {}

    const std::string wtf;
};

class Derived : public AbstractBase
{
public:
    // ...
    Derived(const Derived &r) : AbstractBase(r), moredata(r.moredata) {}
private:
    int moredata;
};

暂无
暂无

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

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