c++内存模型和new/delete

  • 内存四区:①代码区:存放函数体、cpu执行的机器指令;②全局区:放全局/静态的东西;③堆区:手动开辟释放;④栈区:放局部的/函数形参;(意义:不同分区东西的地址差别大,放的东西类别不同;)

  • new/delete

    • 认识

      • 为何分单数据和数组版本,本质和malloc一样,malloc也得sizeof(sth)*number,number是1就是单数据,其它就是连续空间;new的数组形式就是多个数据连续空间 (和指针用中括号访问并不冲突)

      • malloc是函数,形参是字节数;new是关键字,需要类;后面初括号初始化–调用类的构造函数(如果自定义类只有有参构造,那必须要初始化;可以把内置数据类型比作一个类–面向对象的思想)

  • new

    • 单数

      new+类型名(内置类型int/char/float/double/long int等等或者自定义类型:类名)+(初始化);

      eg: int *q=new int(10); person *p=new person("ljh",18);

   * new开辟数组(不可初始化)
 ​
     语法:`new+类型名[size];`
 ​
     eg: `int *p = new int[10];`  

 * delete
 ​
   单数:`delete 指针p;`   `p=NULL;`
 ​
   数组版: `delete[] t;`  `t=NULL;`
  • 匿名对象

    • 特性:即时被销毁;

    • 如:new Person(“ljh”,18);

  • 代码

     #include <iostream>
     using namespace std;
     class person
     {
     public:
         person(string name,int num);
         string name;
         int num;
     };
     person::person(string name,int num)
     {
         this->name=name;
         this->num=num;
     }
     void test01()
     {
         //开辟int并初始化;  int*q=new int;也可以,但是没初始化,仍乱码;
         int *q=new int(10);    
         //自动创建person实例,并初始化;
         person *p=new person("ljh",18);  
         //开辟数组,遍历初始化;
         int *t=new int[10];
         for(int i=0;i<10;i++) {t[i]=i;cout<<t[i]<<"->";}
         //打印结果
         cout<<endl<<"name:"<<p->name<<endl<<"age:"<<p->num<<endl;
         cout<<*q<<endl;
         
         delete p; p=NULL;
         delete q; q=NULL;
         delete[] t; t=NULL;
     }
     int main(void)
     {
         test01();
         return 0;
     }
  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值