String *favorite = new String()
使用new这个开辟一段内存空间 开辟String怎么大的内存空间
new String,new运算符根据数据类型来确定需要多少字节的内存。然后。找到这样的内存,并返回地址。
对类使用new将调用相应的类构造函数来初始化创建新的对象
两个操作 1,开辟内存空间 来放类的对象
2,使用类构造的函数初始化对象
String *favorite = new String()
上面语句由于不带参数 会调用默认的构造函数
String *favorite = new string("my""my""my");
带字符串参数,所以会调用字符串的构造函数
String *favorite = new String (saying[choice]);
首先saying[choice]是类对象的数组
带类的对象参数,会调用类的对象构造函数
1,第一步开辟内存空间 开辟内存空间储存
储存两个东西,一个是 存放字串的地址 str 一个长度 len
2,第二步会调用相应的构造函数 构造函数类型?()括号内部的类型 可知是字符串类型
第一次new开辟空间放的是 str 和len
第二次new是由于构造函数产生的 存放的是字符串
第三步是将第二步的字符串复制给第一步
3,创建pveg 存储其内存为2800
4,pveg指向类对象 所以存储一个地址 就是类对象的地址 2400
什么时候调用析构函数
定位new运算符
通常,new负责在堆(heap)中找到一个足以能够满足要求的内存块。new运算符还有另一种变体,被称为定位new运算符,它能够让你指定要使用的位置。p431
要使用定位new特性,首先需要包括头文件new
delete可与常规new运算符配合使用,但不能与定位new运算符你配合使用
原因在于pc3和pc1并不是开辟内存空间而是定位空间同时赋值
所以没有可以删除的
为什么pc1可以因为pc1等效于第一次创建的内存空间
但是pc3和pc1公用一个内存所以导致pc3没有可删除的