C++ 使用指向对象的指针

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没有可删除的

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值