emplace_back 使用零拷贝添加元素验证

对于push_back和emplace_back在数组尾后添加元素的区别:

 

复制代码
#include<vector>
#include<string>
#include<iostream>
using namespace std;

struct Person{
    string name;
    int age;

    //初始构造函数
    Person(string p_name, int p_age):name(std::move(p_name)), age(p_age){
        cout << "I have been constructed" << endl;
    }

    //拷贝构造函数
    Person(const Person& other) : name(std::move(other.name)), age(other.age){
        cout << "I have been copy constructed" << endl;
    }

    //转移构造函数
    Person(Person&& other):name(std::move(other.name)), age(other.age){
        cout << "I have been moved" << endl;
    }
};

int main(){
    vector<Person> e;
    cout << "emplace_back: " << endl;
    e.emplace_back("jane", 23); //不用构造类函数

    vector<Person> p;
    cout << "push_back " << endl;
    p.push_back(Person("mike", 36));
    return 0;
}
复制代码

 

运行结果显示(自测):

  push_back 调用了构造函数和移动构造函数,emplace_back 只调用了构造函数

posted @   王清河  阅读(173)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
历史上的今天:
2018-04-23 1063. Set Similarity (25)
点击右上角即可分享
微信分享提示