【C++】智能指针使用

背景

写了个小程序有内存泄漏,一查果然又是new了之后忘记delete。C++11都出来那么久了,要习惯用智能指针取代常规的new和delete来避免这种低级错误。代码看上去也会更加简洁。

  • 原来的指针用法
int *indexesNotMatched = new int[n];
for (int j=0;j<n;j++)
{
    indexesNotMatched[j] = j;
}
....
  • 修改为智能指针--new初始化指针的用法
//声明一个int指针并初始化指针指向的值为n,不是申请长度
shared_ptr<int> indexesNotMatched(new int(n));
//以下用法代替new,其他操作不变
unique_ptr<int[]> indexesNotMatched(new int[n]);
  • 修改为智能指针--make_unique初始化的用法,C++14后可以使用
//初始化一个大小为n的int指针数组,用make_unique的情况下,小括号是指明size不是赋值,要跟new用法区分开
unique_ptr<int[]> indexesNotMatched = make_unique<int[]>(n);
//unique_ptr<int[]>改为auto也可以,简化代码
auto indexesNotMatched = make_unique<int[]>(n);

智能指针做函数返回值

unique_ptr<float[]> ComputeLowerBound()
{
  auto SAT = make_unique<float[]>(n);
  ....
  return SAT;
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容