3

私はunique_ptrが初めてです。新しいunique_ptrを返す関数に遭遇するまで、すべてがうまくいっていました。コンパイラは、unique_ptr を潜在的に所有している複数のオブジェクトについて不平を言っているようです。コンパイラの苦情を満たす方法がわかりません。どんな助けでも大歓迎です。

void Bar::Boo()
{
    ...
    // m_Goals is of type std::unique_ptr<Goals>
    auto x = m_Goals->Foo(); // error: 'std::unique_ptr<_Ty>::unique_ptr' : cannot access private member declared in class 'std::unique_ptr<_Ty>'
    //auto x = std::move( m_Goals->Foo() ); // same error
    ...
}


const std::unique_ptr<Goals> Goals::Foo()
{
    std::unique_ptr<Goals> newGoals( new Goals() );
    ...
    return newGoals;
    // also tried "return std::move( newGoals )" based on http://stackoverflow.com/questions/4316727/returning-unique-ptr-from-functions
} // this function compiles
4

1 に答える 1

13

を削除するconstと、コンパイラは、値で戻るときにコピー コンストラクターを使用するように強制されconstます。値で返すことにはほとんど意味がなく、const反対することを強くお勧めします。const値で返す目的は? を参照してください。詳細については。

于 2013-06-18T09:12:16.627 に答える