你的构造函数没问题。unique_ptr
一个可能的问题是,在将两个s 提供给构造函数时,您没有移动它们:
#include <memory>
#include <string>
using namespace std;
struct KV{
unique_ptr<string> k, v;
KV(){}
KV (unique_ptr<string> k_,unique_ptr<string> v_):k(move(k_)),v(move(v_)){}
};
int main()
{
unique_ptr<string> p1(new string());
unique_ptr<string> p2(new string());
// KV v(p1, p2); // ERROR!
KV kv(move(p1), move(p2)); // OK
vector<KV> v;
v.emplace_back(move(p1), move(p2)); // OK
}
更新:
VS2012 发布时,VC11 不支持可变参数模板。的正确实现emplace_back()
应该是可变的,但 MS 提供了一个虚拟的。当 CTP 发布时,只有编译器更新为支持可变参数模板,但 STL 尚未更新。因此,您仍然会收到错误消息。
如果你不能改变你的编译器,除了等待产品的下一个版本发布之外,没有什么可做的。同时,避免使用emplace_back()
和使用push_back()
。