知识点:
new 和 delete 对比malloc申请 自定义类型的内存 会调用构造和析构函数 创建自定义类型的数组时 甚至会初始化
如果没有默认构造,则要用{}将构造函数的参数传过去
win下 vs2019中 连续的一个步骤里面,如果存在构造+拷贝构造 会被优化成 一个构造
第一个步骤里面有 拷贝构造 + 拷贝构造(赋值 + 拷贝构造优化而来)优化成一个拷贝构造
第二个种写法里面,拷贝构造 + 赋值。ra2已经存在,无法优化成拷贝构造,开销多了一个构造 和 一个赋值
内存管理
一份源代码由数据和代码组成,在内存中也将两种分开存储,好处是不同的程序可以共享一份代码,同时拥有不同的数据。这两大类又以段(section)的方式存储,分为代码段/常量区,数据段/静态区。
例题
char2 把abcd/0 这些单个的char 类型的变量存在数组里面
pchar3 是把 abcd/0 这堆字符串常量的地址存在栈区上
ptr1 是int* 类型的局部变量,而不是malloc出来的空间
sizeof算大小 数组名算的是整个数组的大小 指针算的是指针的大小
strlen算到/0
new 和 c语言里面的 初始化部分数组一样,其余的初始化0,而没做初始化时全是随机值。
关于初始化: calloc全部初始化成某一个值,过于暴力;而new对于自定义类型结构回去调用他的构造函数进行初始化。