new指针的使用

T **pt;

pt=new T*[10];//开创10个T* 类型大小,返回其T*[0]地址

T * pt;

pt[1]=pt;  //在开创的第二个地方 的值 变为pt。 第二个地方本身没变·····

new 相当于开一块内存,对应内存的值 可以随便更改,

只要头指针指向的地方不变,那一块内存不会消失,不会被更改。

    void AddCondiment(Condiment * condiment){
        if(!num) {p=new Condiment *(condiment);num++;}
        else{
        Condiment **temp=p;//换个人接手
        p=new Condiment *[++num];//重新开一个内容
        for(int i=0;i<num-1;++i){
        p[i]=temp[i];//p[i] 记录temp[i]存的值
        }
        if(num>2)         //temp的值被记录了,那么开的内存可以delete了。
            delete[] temp;
        else delete temp;
        p[num-1]=condiment;
        }
    }

new:重载只对第一步操作 (建立内存) //必然全局 静态,且该函数调用时 并没有对象产生,所以没有this指针,不能用对象数据!
delete:只对第三步操作 (释放内存)

假设定义类A;
T 为任意内置类型

·⒈若没有在类中重载: (T是任意类型)
系统中可以用的new有

1.new T        同 ::new T;    //创建一个T ,T是默认值 返回其地址
2.new T(值)    同::new T(值);
3.new T[10]    同::new T(值);    //创建一个T数组,T是默认值,返回其首地址
4.new T[2] { a1   }              //T[1]=nullptr;  创建的同时赋值
5.new(地址) T;            //在(地址)处,创建一个T


1. operator new(3);     //开一个内存,内存大小是3个字节, 返回void*型地址
2.同::operator new(3);

·⒉若在类中有重载:重载在类A里
① 对于一切普通new A全都变成了调用类A的重载

1.new A();
2.new A[2];    注: 可以new A[2]()   但不能带括号初始化。new A[2](5)是不行的
3.A::operator new(size)    //相当于就直接调用那个函数 传参size  返回void*;

②调用系统
1.::new A();
2.new T;
3.::new char
4.operator new(size);
5.::operaotr new(size);
6.::new(地址) A();

注意任何与A有关的 若不加::
直接调用的是 重载的,
与A无关的可以正常用。

所以operator new(size) 不受影响

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yorelee.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值