簡體   English   中英

C ++私有拷貝構造函數問題

[英]C++ private copy constructor issue

我正在構建一個小型C ++應用程序,我正在尋找為我的參考持有者制作一個私有的復制構造函數。

當我在我的主要課程中使用我的課程時,一切正常,但是當我嘗試使用Google Test測試它時,我收到一條錯誤,指出我的復制構造函數是私有的

TEST (Library, constructorParams) {
    Library lib = Library("my Library");
    ASSERT_EQ("my Library", lib.getNom());
}

Library.h(我的.cpp中沒有復制構造函數和賦值運算符的定義)

class Library {
public:
    ...
private:
    ...

    Library (const Library& obj);
    Library & operator=(const Library& obj);
};

為什么我的私有拷貝構造函數出錯(可能在我的測試中使用不當?)?

這里

Library lib = Library("my Library");

您在語義上從RHS上構造的臨時對象執行復制構造。 即使編譯器可能會優化副本,復制構造函數也需要公開訪問。

試試這個:

Library lib("my Library");

詳細了解復制初始化

Library lib = Library("my Library");

在這一行上,您嘗試復制構造一個類型為Library的對象,但由於其copy-constructor是私有的,因此無法完成。 你應該這樣做:

Library lib("my Library");

您正在從這行代碼中調用復制構造函數

Library lib = Library("my Library");

並且您已將其定義為該類的私有方法。

該操作與對賦值運算符的調用無關(您在問題中提到),如果您考慮它的等價,則更清楚:

Library lib(Library("my Library"));  // Here the invocation of the copy 
                                     // constructor is more explicit

使用這種格式的代碼,更清楚的是,不需要首先在臨時中創建對象,而不是調用復制構造函數來創建該對象的另一個實例。

正確的方法應該是:

Library lib("my Library");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM