stl – C 0x emplace_back与不可复制的项目
发布时间:2020-12-16 03:19:22 所属栏目:百科 来源:网络整理
导读:我想知道我是否正确理解emplace_back #include vectorusing namespace std;struct Hero { Hero(const string) {} Hero(const char*) {} Hero(int) {} // forbid a clone: Hero(const Hero) = delete; Hero operator=(const Hero) = delete;};int main() { ve
我想知道我是否正确理解emplace_back
#include <vector> using namespace std; struct Hero { Hero(const string&) {} Hero(const char*) {} Hero(int) {} // forbid a clone: Hero(const Hero&) = delete; Hero& operator=(const Hero&) = delete; }; int main() { vector<Hero> heros1 = { "Bond","Hulk","Tarzan" }; // ERR: copies? vector<Hero> heros; heros.emplace_back( 5 ); // ERR: copies heros.emplace_back( string("Bond") ); // ERR: copies heros.emplace_back( "Hulk" ); // ERR: copies } 因此,我真的很想知道如果我不明白emplace_back:我虽然会防止制作一个英雄的副本,因为它创建了原位. 还是我的g -4.7.0中的实现错误? 解决方法
您需要定义一个移动构造函数和移动赋值运算符,如下所示:
struct Hero { Hero(const string&) {} Hero(const char*) {} Hero(int) {} Hero(Hero&&) {} Hero& operator=(Hero&&) { return *this; } // forbid a clone: Hero(const Hero&) = delete; Hero& operator=(const Hero&) = delete; }; 这允许将Hero类型的值移动到该函数中.移动通常比复制快.如果类型既不可复制也不可移动,那么您不能在std :: vector中使用它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |