c++智能指针之unique_ptr以及管理数组指针

  1. 如何智能管理数组指针
    如果在一个函数中需要new一块连续的空间,那么需要在所有可能返回的地方检查是否delete了这个空间

1.1 需要手动释放

void work()
{
	bool bFlag = true;
	char* pData = new char[1024];
	bFlag = doWork1();
	if( !bFlag ){
		delete[] pData;
		return;
	}
	bFlag = doWork2();
	if( !bFlag ){
		delete[] pData;
		return;			
	}
	delete[] pData;
	return;	
}

1.2智能指针自动释放

void work()
{
	bool bFlag = true;
	unique_ptr<char[]> pData(new char[1024]);
	bFlag = doWork1();
	if( !bFlag ){
		return;
	}
	bFlag = doWork2();
	if( !bFlag ){
		return;			
	}
	return;	
}
  1. 连续开辟内存,不释放和使用智能指针管理的区别

2.1 一会内存就消耗殆尽

for(int j = 0; j < 1000000*1000;j++){
	printf("%d\n",j);
	char *p = new char[1024*1024];
	sleep(0.1);
}

2.2 正常运行,没有问题

for(int j = 0; j < 1000000*1000;j++){
	printf("%d\n",j);
	unique_ptr<char[]> p(new char[1024*1024]);
	sleep(0.1);
}
  1. 访问智能指针的地址,改变地址的内容
void printUnique(char* p,int n){
	for(int i = 0; i < n;i++)
		printf("%c ",p[i]);
	printf("\n");
}

void main()
{
	int n = 10;
	unique_ptr<char[]> pData(new char[n]);
	printUnique(pData.get(),n);
	char* ptest = pData.get();
	strcpy(ptest,"hello");
	printUnique(pData.get(),n);
	memset(pData.get(),0,n);
	printUnique(pData.get(),n);
	strcpy(pData.get(),"world");
	printUnique(pData.get(),n);
}

参考博文
https://blog.csdn.net/ccb1372098/article/details/126190302
2.2.1 unique_ptr不支持普通的拷贝或赋值操作。但可以传递unique_ptr参数和返回unique_ptr
2.2.2 unique_ptr操作

https://www.cnblogs.com/xiangtingshen/p/10442242.html

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值