主要包含一下几部分内容

后续可能会再补充

  • new分配内存块的来源
  • new时初始化
  • new失败时
  • new运算符、函数、替换函数
  • 定位new运算符
  • 定位new的重载

new分配内存块的来源

C++ primer plus书中P321页说,new负责在堆(heap)中找到一个足以能够满足要求的内存块。
但更多的文章都说new从自由存储区(free store)上为对象动态分配内存空间;
找到一个相对权威的博文吧,上面仔细介绍了一下:
自由存储区是C++基于new操作符的一个抽象概念,凡是通过new操作符进行内存申请,该内存即为自由存储区。
那么自由存储区是否能够是堆(问题等价于new是否能在堆上动态分配内存),这取决于operator new 的实现细节。自由存储区不仅可以是堆,还可以是静态存储区,这都看operator new在哪里为对象分配内存。
至于operator new的具体实现细节,还没来得及去看,等后续了解之后补上。
c++new自由存储区

new初始化

两种初始化方法,()和{ },建议用{ }

//*npa,*npb值为6
int *npa = new int (6);
int *npb = new int {6};
//指向数组就只有下面一种初始化方法
int *nparr = new int[4] {1, 2, 3, 4};

new失败时

会引发std::bad_alloc异常,具体内容还没复习到,后续补充。

new运算符、函数、替换函数

new,delete(包括new[],delete[])都是调用函数:

void * operator new (std::size_t);
void * operator new[] (std::size_t);void * operator delete (void *);
void * operator delete[] (void *);

而且这些函数是可替换的,可以定义自己的new函数替换上述函数。(书上原话,注意是可替换的,看文章说new/delete也可以被重载)

定位new函数

需要包含 #include < new > 头文件!
定位new是可重载的!!
注意这个new函数工作原理是返回传递给它的地址,并将其强制转换成为(void *)型指针。它没有向堆/静态存储区域申请空间,也无需delete
用法:

#include <new>
char buffer[20];
...//原本的new//实际是调用下面这个函数//new(sizeof(double) * 3);
double *p = new double[3];
...//*pa指向的是buffer//实际是调用下面这个函数//new(sizeof(double) * 4, buffer);
double *pa = new (buffer) double[4];//*pb指向的是(buffer +  2 * sizeof(double))
double *pb = new (buffer + 2 * sizeof(double)) double[4];

C++动态分配new(C++ primer,P320)相关推荐

  1. C++ Primer 第三版 读书笔记

    1.如果一个变量是在全局定义的,系统会保证给它提供初始化值0.如果变量是局部定义的,或是通过new表达式动态分配的,则系统不会向它提供初始值0 2.一般定义指针最好写成:" string * ...

  2. 《C Primer Plus》读书笔记——存储类、链接和内存管理

    背景 距离上次写读书笔记的日子已有半个月了.这段时间一直在做摄像头直立平衡车,也把<C Primer Plus>的中级部分扫了一遍.现在做赛道算法识别遇到瓶颈了,就想把读书笔记补回来.原计 ...

  3. c++ primer 5th第13章拷贝控制知识点和自编习题答案

    首先,先给大家提个醒.在网上的随书源代码里关于hasptr类的类指针版本编写的移动构造函数.移动赋值运算符.和析构函数部分是有错误的.大家可以把hasptr累指针版本(里面带移动构造函数和移动赋值运算 ...

  4. Primer c++ 第5版pdf

    下载地址:网盘下载 内容简介  · · · · · · 这本久负盛名的 C++经典教程,时隔八年之久,终迎来史无前例的重大升级.除令全球无数程序员从中受益,甚至为之迷醉的--C++ 大师 Stanle ...

  5. C++11 Primer Plus(三)之名称空间与类

    自己写的C++11 Primer Plus 学习笔记,如有雷同不胜荣幸,如有错误敬请指正 1. 内存模型与名称空间 1. 单独编译(程序划分) 友好的程序代码结构: 头文件:包含结构声明和使用这些结构 ...

  6. C++ Primer Plus课后编程练习第6章参考代码

    (C++ Primer Plus课后编程练习第6章参考代码) 声明: 作者入门小白,将学习过程中的代码做一些分享,仅供大家参考,欢迎大家交流指正.全部编译运行过,水平有限,不喜勿喷. 环境: Wind ...

  7. C++Primer笔记——拷贝控制

    CHAPTER13-拷贝控制(C++ Primer笔记) 13.1 拷贝.赋值与销毁 13.1.1 拷贝构造函数 13.1.2 拷贝赋值运算符 13.1.3 析构函数 13.1.4 三/五法则 13. ...

  8. C++ Primer读书摘要(一)

    C++ Primer 第一章 快速入门 1.1 编写简单的C++程序 任何一个都要包含一个main函数,因为这个函数是系统执行入口c++也一样,函数格式是 int main(); 和别的主要函数不同C ...

  9. C++ primer(第五版)简单读书笔记

    目录 第一章  开始 第二章 变量和基本类型 第三章 字符串.向量和数组 第四章 表达式 第五章 语句 第六章 函数 第七章 类 第八章 IO库 第九章 顺序容器 第十章 泛型算法 第十一章 关联容器 ...

最新文章

  1. R语言dplyr包使用mutate函数生成新的数据列(不改变原数据列)实战
  2. 如何把主机系统上传到服务器,主机系统上传到服务器
  3. Java程序员进阶的 3 个层次,你处于哪个?
  4. HugeGraph图数据库获Apache TinkerPop官方认证
  5. 帝国CMS7.0 7.2 7.5微信登录插件 UTF-8版本
  6. 汇编在嵌入式编程中的作用_如何在嵌入式Power BI报表中以编程方式传递凭据
  7. 6.6 BERT家族02——sentence-BERT、BioBERT
  8. LVS-DR工作原理图文详解(转载)
  9. c php乱码,Cknife的PHP功能部分修正,解决SHELL无法回显以及中文乱码
  10. 第二章 原理图绘制与检查
  11. 怎样将计算机和电视机连接网络连接,电脑怎么连接电视 电脑和电视连接方法图文教程...
  12. 通过多视图信息瓶颈学习鲁棒表征
  13. 骨传导耳机是利用什么原理听歌?什么骨传导耳机好用
  14. Java开发 微软OAuth身份验证在EWS中的应用
  15. 关于cuda、cudnn环境配置
  16. 从人脸识别到唇语识别,图像识别技术发展现状
  17. 腾讯,迅雷,完美等公司的一些笔试题整理
  18. 荧光素标记氨基酸,异硫氰酸荧光素FITC标记D-天冬氨酸;FITC-D-Aspartic acid
  19. 关于编辑Windows的右键【新建】删除和添加
  20. 开始使用TreeATE

热门文章

  1. 视频教程-2019年人工智能热门案例精讲之P图美化照片-深度学习
  2. 论文翻译解读:Translating Embeddings for Modeling Multi-relational Data【TransE】
  3. python名片制作代码_教你做一张能运行 Python 的名片,成本只要20元!
  4. 如何将D盘空间压缩并扩展C盘
  5. springboot基于微信小程序的电器商城系统的设计与实现毕业设计源码251453
  6. 首个Laravel工作流引擎发布 V1.0正式版
  7. 数论——唯一分解定理
  8. python案例:股民福利,采集股票数据~
  9. 【ROS学习】- tf学习 - tf中重要函数解析 (陆续更新....)
  10. OpenGL超级宝典学习笔记——操作矩阵