簡體   English   中英

為什么調用復制構造函數而不是移動構造函數?

[英]Why is the copy constructor called instead of the move constructor?

請考慮以下代碼:

class Outer
{   
class Inner
{
public:
    Inner(Inner&& i):outers(std::move(i.outers)),test(std::move(test))
    {}

    void addOuter(const Outer& o) {outers.push_back(std::move(o));} 
private:
    std::vector<Outer> outers;      
    std::unique_ptr<std::string> test;      
};

public:
Outer(Outer&& o):inners(std::move(o.inners))
{}
private:
std::vector<Inner> inners;

};

當我嘗試在Visual Studio 2012上編譯上面的代碼時,我收到以下錯誤:

Error 1 error C2248: 'std::unique_ptr<_Ty>::unique_ptr' : cannot access private member declared in class 'std::unique_ptr<_Ty>'

顯然,編譯器調用復制構造函數而不是addOuter方法中的push_back中的移動構造函數。 這是編譯器錯誤嗎? 如果不是為什么,對於這個特定情況,是不是調用了移動構造函數?

因為o作為const引用傳遞給addOuter

暫無
暫無

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

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