週末を過ごす私はC++のスキルをリフレッシュして、いくつかのC++ 11を学びたいと思っています。次の問題に遭遇しました。使用ムーブコンストラクタ:次のように定義され、std :: vectorをコンストラクタに渡してセマンティクスを移動する
class builder
{
...
container build() const
{
std::vector<items> items;
//... fill up the vector
return container(items); //should move the vector right? wrong!
//return container(std::move(items)); also doesn't work
}
}
とクラスのアイテムとコンテナ:
は、私は次のように定義されたビルダークラスを、持っている
class container
{
public:
container(std:vector<item> items)
: items_(items) // always invokes copy constructor on vector, never move
{ }
container(container&& rhs)
{
...
}
...
private:
std::vector<item> items_;
}
class item
{
public:
//move .ctor
item(item && rhs);
item& operator=(item && rhs);
//copy .ctor
item(const item& rhs); //this gets called instead of move .ctor
item& operator=(const item& rhs);
...
}
今私のコードの使用するすべてのアイテムが最初に構築してからコピーされます
builder my_builder;
...
auto result = my_builder.build();
を...意味するものではあり
どうやってアイテムをコピーしないようにclassess次書くべき
?私はちょうど標準のポインタを使用するに戻って行く必要がありますか?
'item2'とは何ですか? – Mankarse
@Mankarseこれはタイプミスです。 – ghord