簡體   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