2、动态内存分配

1、计算机中的内存划分

在这里插入图片描述

2、c++中用 new 分配堆空间 delete 释放

2.1、分配一块堆空间

数据类型 *变量名 = new 数据类型; // -> 分配一块内存空间 
例子:分配一块int 类型的堆空间 
	int *p = new int;//一条龙服务!!自己计算 空间的大小,自己进行 类型的转换!! 
	int *q = new int(10086); //支持在分配空间的时候对堆空间进行初始化!! 


释放堆空间: delete 变量名 
例子: delete p; 
	  delete q;

2.2、分配多块堆空间

数据类型 *变量名 = new 数据类型[size]; 	// size用户需要分配多少块这样的堆空间

例子: 分配100int 类型的堆空间
int *p = new int[100];

例子: 分配多块堆空间并初始化,只初始化了前面5int *q = new int[20]{1,2,3,4,5};


释放多块堆空间: delete []变量名; 
例子:delete []p;

例子:利用new 去分配一个二维数组
在这里插入图片描述

int main() 
{ 
	//该数组的类型是什么 ??? 
	// int a[10][10]; 
	int (*p)[10] = new int[10][10]; 
	//对二维数组进行赋值 int x=0,y=0; 
	for(y=0;y<10;y++) 
		for(x=0;x<10;x++) 
		{ 
			p[y][x] = x+y; 
		}
	//输出
	for(y=0;y<10;y++) 
		for(x=0;x<10;x++) 
		{ 
			cout << p[y][x] << endl; 
		} 
	//释放 
	delete []p; 
}

3、new 与 malloc 的区别

  1. new 可以自动计算数据类型的大小 与 类型的转换,malloc 只能手动进行。
  2. new 可以在分配空间的时候初始化,malloc 不行。
  3. 最重要的特点!!!)在分配类的堆空间时, 使用new会调用类中的构造函数,malloc 不行。
    例子:
    class  base
    {
    	public: 
    	     base(int a){
    	         cout << "调用based的构造函数" << endl;
    	         this->a = a;
    	     }
    	    void show_base()
    	    {
    	        cout << a << endl; 
    	    }
    	private: 
    		int a;
    };
    
    int main()
    {
        //利用malloc 分配base 的堆空间 
        //不会调用base 的构造函数的,导致类中的数据成员无法初始化 
        base *p = (base *)malloc(sizeof(base));   
    
        p->show_base(); 
        //可以调用构造函数去初始化类中的成员   
        base *q =  new  base(10086); 
        //提示:假设对象是一个指针  则用  -> 
        q->show_base(); 
    }
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值