举个栗子:Complex* pc = new Complex(1, 2); 此处new称为表达式或运算符new,编译器将其转化为一下代码:

Complex* pc;
try
{void* mem = operator new(sizeof(Complex));  // 底层调用malloc函数分配内存pc = static_cast<Complex*>(mem);pc->Complex::Complex(1, 2);  // 一般由分配器的construct函数完成,主要工作:// 使用placement new: new(mem)(arguments_list)// 即:pc = new(mem)(1,2)完成初始化// 相应的析构对象时调用分配器的destroy函数,释放内// 存则调用operator delete
} catch( std::bad_alloc )
{// 处理可能出现的异常
}

也就是创建新对象时,new做了两件事:分配内存、调用构造函数

深入探索C++对象模型,第45页。 class X定义了一个拷贝构造函数,一个虚析构函数,一个虚函数foo();

X foobar()
{X xx;X *px = new X;xx.foo();px->foo();delete px;return x;
}

这个函数可能在内部转换为//虚拟C++码

void foobar(X& _result)
{//使用引用返回,属于编译器的优化了。//构造_result.X::X();//申请内存px = _new(sizeof(X));//调用构造函数if( px != 0)px->X::X();//成员函数的形式的转换,成员函数就是普通函数不过有一个this指针foo(&_result);//虚函数的基本调用方式,通过vptr来调用(*px->vtbl[2])(px);//调用虚析构函数if( px != 0){(*px->vtbl[1])(px);_delete(px);}//不需要使用named return statement//不需要摧毁Local object xx//而是使用了传入参数_resultreturn;
}

new函数的底层实现相关推荐

  1. 【Python基础避坑】函数内存底层分析,全局变量/局部变量,参数传递,浅拷贝/深拷贝

    老高说,基本功不扎实会在工作中遇到很多的坑,非常同意- 函数定义示例 1.含有返回值 # -*-coding:utf-8-*- def add(a, b):'''两数相加'''sum = a + br ...

  2. 求平方根sqrt()函数的底层算法效率问题

    我们平时经常会有一些数据运算的操作,需要调用sqrt,exp,abs等函数,那么时候你有没有想过:这个些函数系统是如何实现的?就拿最常用的sqrt函数来说吧,系统怎么来实现这个经常调用的函数呢? 虽然 ...

  3. 转载|网络编程中阻塞式函数的底层逻辑

    逛知乎看到的,觉得写的挺透彻的,转载一下,原文链接:Unix网络编程里的阻塞是在操作系统的内核态创建一个线程来死循环吗? 原文以阻塞式的recv函数作为讲解,但是所有阻塞式的api底层逻辑基本相通. ...

  4. js cookies 存数组_用一个例子理解JS函数的底层处理机制

    个人笔记,如有错误烦请指正 以下面代码的运行举例,一行行进行运行的解析 var x = [12, 23]; function fn(y) {y[0] = 100;y = [100];y[1] = 20 ...

  5. linux 的fork函数原型,浅析fork()和底层实现

    记得以前初次接触fork()函数的时候,一直被"printf"输出多少次的问题弄得比较晕乎.不过,"黄天不负留心人".哈~ 终于在学习进程和进程创建fork相关 ...

  6. 虚函数的作用及其底层实现机制

    1. C++中虚函数的作用和多态 虚函数: 实现类的多态性 关键字:虚函数:虚函数的作用:多态性:多态公有继承:动态联编 C++中的虚函数的作用主要是实现了多态的机制.基类定义虚函数,子类可以重写该函 ...

  7. 一种注册表沙箱的思路、实现——研究Reactos中注册表函数的实现1

    因为我们沙箱注入了一个DLL到了目标进程,并且Hook了一系列NtXX(NtOpenKey)函数,所以我们在注入的代码中是不能使用RegXX(RegOpenKey等)这类函数的.因为RegXX系列函数 ...

  8. 汇编程序设计与计算机体系结构软件工程师教程笔记:函数、字符串、浮点运算

    <汇编程序设计与计算机体系结构: 软件工程师教程>这本书是由Brain R.Hall和Kevin J.Slonka著,由爱飞翔译.中文版是2019年出版的.个人感觉这本书真不错,书中介绍了 ...

  9. c++ 函数指针_开发经验分享(5) 修改Makefile实现C/C++混合编程

    ◆  ◆  前言 ◆  ◆ Arduino/Stm32duino上的部分库使用C++写的,所以如果想移植库就需要使Stm32CubeMX生成Makefile支持C++的编译.借由文中方法实现了将Ard ...

最新文章

  1. 皮一皮:论北方有多冷...
  2. 【高德地图API】那些年我们一起开发的APP—即LBS应用模式分享
  3. 百度搜索结果URL参数含义解析
  4. 漫画:通俗易懂的进程与线程解释
  5. Spring Boot——RabbitMQ
  6. LeetCode 464. 我能赢吗(状态压缩+记忆化递归 / 博弈)
  7. IndexNotReadyException: Please change caller according to com.intellij.openapi.project.IndexNotReady
  8. 用python写一个自动注册脚本_python实现自动化上线脚本的示例
  9. 华为Mate 40 Pro钢化膜上手:6.6寸大曲率瀑布屏 黑边加速消失
  10. 你们是魔鬼吗?Adobe研发了一款反PS工具:自己打自己?
  11. unix操作系统设计高清中文
  12. Win10系统怎么看隐藏文件夹
  13. Leetcode 5067.统计只含单一字母的子串
  14. 使用Springboot整合Vue项目案例—登录界面
  15. 按住滑块 拖拽验证html5,【原生】JavaScript 实现滑动拖动验证
  16. 国美易卡RMAN客户端工具,国美易卡备份有效数据
  17. RHEL6 或CentOS 6配置共享存储--使用iSCSI
  18. python猜年龄代码_Python实现猜年龄游戏代码实例
  19. 知识图谱可视化vue.js + d3.js
  20. 技术报告 | 罗汉堂:理解大数据:数字时代的数据和隐私2021.pdf(附下载链接)

热门文章

  1. c语言学生成绩管理系统课设作业,C语言课程设计——学生成绩管理系统
  2. java web 分页_Java Web(十一) 分页功能的实现
  3. SHFormatDrive格式化硬盘
  4. 如何在Windows下发布QT应用程序
  5. 镜头对摄像机性能的影响
  6. 中科曙光服务器配置与虚拟系统安装等优化
  7. js实现侧边栏信息展示效果
  8. TCPIP header
  9. 【转载国外好文】代工开发一个iOS应用没有那么容易
  10. [cocos2d-x]深入--几个代表性的类