首页 > 编程语言 >C++零拷贝

C++零拷贝

时间:2023-01-25 22:35:26浏览次数:118  
标签:beila emplace back C++ push 拷贝 构造函数

零拷贝就是一种避免 CPU 将数据从一块存储拷贝到另外一块存储的技术

vector的函数emplace_back()
它跟push_back()函数一样可以将一个元素插入容器尾部
区别在于使用push_back()函数需要调用拷贝构造函数
而使用emplace_back()插入的元素原地构造,不需要触发拷贝构造,效率更高

比如有一个类Person,构造函数传入一个name和age

vector<Person> e;
e.push_back(Person("beila",18));

括号内的Person("beila",18)就是构建了一个临时对象
随后push_back又将该临时对象拷贝了一下,放在数组e的内部
如果使用emplace_back,就可以避免拷贝的过程,直接在vector内部执行构造函数

e.emplace_back("beila",18);

标签:beila,emplace,back,C++,push,拷贝,构造函数
From: https://www.cnblogs.com/lxzbky/p/17067368.html

相关文章

  • C++面向对象
    封装继承多态允许将子类类型的指针赋值给父类类型的指针多态的实现方式覆盖override,重载overload覆盖是子类重新定义父类的虚函数重载是指允许存在多个同名函数,而这......
  • 【UE4 C++】调用外部链接库:lib静态库
    本例以插件形式测试使用Lib引用,打包程序运行不用再拷贝lib文件需要lib文件和.h头文件lib部分的代码.h头文件 #pragmaonce #ifndef__MYT......
  • Win32拷贝文件夹
    下面的代码展示了如何拷贝文件夹:BOOLCopyDir(LPCTSTRlpszSrcDir,LPCTSTRlpszDstDir){SHFILEOPSTRUCTsfo;ZeroMemory(&sfo,sizeof(sfo));sf......
  • 详细实例说明+典型案例实现 对枚举法进行全面分析 | C++
    第五章枚举法:::hljs-center目录第五章枚举法●前言1.简要介绍2.代码及结果示例(简单理解)3.生活实例●二、枚举法的典型案例——鸡兔同笼&质数求解1.鸡......
  • C++Day09 深拷贝、写时复制(cow)、短字符串优化
    一、std::string的底层实现1、深拷贝1classString{2public:3String(constString&rhs):m_pstr(newchar[strlen(rhs)+1]()){4}5private:6cha......
  • 【转】c++中Vector等STL容器的自定义排序
    三种方式实现vector的自定义排序方法1:重载运算符#include<vector>#include<algorithm>#include<functional>usingnamespacestd;structTItem{intm_i......
  • c++学习日记day1 1/25
    B.超重青蛙题目描述在青蛙王国,每个青蛙有着不同的体重。给出一组青蛙的体重,计算里面超出平均体重的青蛙数量。 输入第一行输入参数T,表示有T个测试实例第二行输入......
  • C++指针类型的局部变量初始化
    编译器一般不会对一般变量进行初始化,当然也包括指针。所以负责初始化指针变量的只有程序员自己。使用未初始化的指针是相当危险的。因为指针直接指向内存空间,所以程序员很......
  • C++ 单例模式最佳实践
    单例模式有很多种实现:懒汉/饿汉非线程安全线程安全每次判空加锁(效率不高)DCL:Double-checklock(繁琐,C++11之前的最佳实现)Meyers’singleton:静态变量(简洁,C++11之后......
  • C++ 实现复制赋值运算符重载
    考察点返回值类型MyClass&,可以连续赋值参数类型:(constMyClass&rhs)或者(MyClassrhs)值传递(copy-swap)自赋值安全无内存泄漏,旧值需要析构异常安全参考实现c......