栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

c++初级课5.3C++内存管理方式

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

c++初级课5.3C++内存管理方式

C++内存管理方式

1.使用方法

void test2()
{
	int* p1 = new int;//new一个对象
	int* p2 = new int[10];//new十个对象
	int* p3 = new int (10);//new一个对象初始化为10
	int* p4 = new int[10]{ 5,4 };//new十个对象第一个初始化5第二个初始化4,其他初始化0(C++11支持)
	delete p1;
	delete[]p2;
	delete p3;
	delete[]p4;
}

2.new和malloc不同之处:
对于内置类型与malloc无异,
对于自定义类型,new在开辟时会自动调用构造函数,delete会调用析构函数,而malloc和free不会。

struct ListNode
{
	int _val;
	ListNode* _next;
	ListNode(int val  = 0)
		:_val(val)
		, _next(nullptr)
	{
		cout << "ListNode()" << endl;
	}
	~ListNode()
	{
		cout << "~ListNode()" << endl;
	}
};
void test3()
{
	cout << "p1:" << endl;
	ListNode* p1 = new ListNode;
	cout << "p2:" << endl;
	ListNode* p2 = (ListNode*)malloc(sizeof(ListNode));
	cout << "p1:" << endl;
	delete p1;
	cout << "p2:" << endl;
	free(p2);
}

运行结果:

3.注意:

malloc开空间失败返回空指针
new开空间失败抛异常
了解:

void test4()
{
	void* p1 = malloc(1024 * 1024 * 1024);
	void* p2 = malloc(1024 * 1024 * 1024);
	cout << p2 << endl;
	try 
	{
		void* p3 = new char[1024 * 1024 * 1024];
		cout << p3 << endl;
	}
	catch (const exception& e)
	{
		cout << e.what() << endl;
	}
}

运行结果:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/994101.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号