c++动态内存分配

c++动态内存分配

在c语言中是malloc/free函数来进行动态内存分配,这两个属于函数调用,而在c++中常常通过运算符new和delete进行动态内存分配, 其中

  • 在堆上生成对象,需要自动调用构造函数

  • 在堆上生成的对象,在释放的时候需要自动调用析构函数

  • new/delete, malloc/free需要配对使用

  • new[]/delete[]生成和释放对象数组

看一下内存区域图,

avator

可以看到动态分配区是在堆区,而为运行函数而分配的局部变量,函数的参数,返回数据,返回地址是都在栈区。

下面是一个代码的例子

#include <iostream>
using namespace std;

class Test{
public:
	Test()
		:m_val(0)     //初始化下面那个私有的
	{
		cout<<"Test"<<endl;
	}
	
	~Test(){
		cout<<"~Test"<<endl;
	}
private:
	int m_val;

};    //别忘了有个分号

int main
{
	{
		Test a;
	}  //在这个大括号结束的时候就会调用析构函数来释放
	cout <<"end of }"<<endl;
	
	Test* pVal = new Test(); //会调用构造函数
	delete pVal;  //会调用析构函数
	pVal = NULL; // delete完了之后再给空,这是编程规范。
	

	//而在c里面genenal会这样用
	int *p = (int*)malloc(sizeof(int));   //申请
	free(p);        //释放
	p = NULL; //这也是编程规范   
	
	//下面是关于数组的
	Test *pArray = new Test[3];
	delete[] pArray;
	pArray=NULL;
	//注意new[]和delete[]也要成对的使用,不然会出错。
	

	return 0;
}

输出为

Test
~Test
end of }
Test
~Test
Test
Test
Test
~Test
~Test
~Test

注意上面的Test里面没有带参数,如果带参数的话,new的时候也应该带参数。

打赏,谢谢~~

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,多谢支持~

打开微信扫一扫,即可进行扫码打赏哦