在周末,我正在尝试刷新我的C++技能并学习一些C++11。我遇到了以下问题:我无法强制我的容器类正确使用移动构造函数。
我有一个生成器类,定义如下:
现在我的代码只是简单地使用了 。
我有一个生成器类,定义如下:
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();
这会导致每个项目首先被构建,然后再被复制...
我应该如何编写以下类以避免复制项目?我是否应该回到使用标准指针?