[英]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.