stl – C 0x emplace_back与不可复制的项目

前端之家收集整理的这篇文章主要介绍了stl – C 0x emplace_back与不可复制的项目前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想知道我是否正确理解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中使用它.

原文链接:https://www.f2er.com/c/111857.html

猜你在找的C&C++相关文章