智能指针管理数组

数组的智能指针的限制:

1,unique_ptr的数组智能指针,没有*和->操作,但支持下标操作[]

2,shared_ptr的数组智能指针,有*和->操作,但不支持下标操作[],只能通过get()去访问数组的元素。

3,shared_ptr的数组智能指针,必须要自定义deleter 或者使用helpestd::shared_ptr<int> p(new int[10],std::default_delete<int[]>()); 

智能指针的使用建议:

局部变量 使用  unique_ptr

需要传递是使用 shared_ptr 配合weak_ptr

#include <iostream>
#include <memory>
#include <vector>

using namespace std;

class test{
public:
  explicit test(int d = 0) : data(d){cout << "new" << data << endl;}
  ~test(){cout << "del" << data << endl;}
  void fun(){cout << data << endl;}
public:
  int data;
};
int main(){
  //test* t = new test[2];                                                      
  unique_ptr<test[]> up(new test[2]);
  up[0].data = 1;
  up[0].fun();
  up[1].fun();
  shared_ptr<test> sp(new test[2], [](test* p){delete [] p;});
  (sp.get())->data = 2;//数组的第一个元素                                       
  sp->data = 10;
  test& st = *sp;
  st.data = 20;
  (sp.get() + 1)->data = 3;//数组的第二个元素                                   
  return 0;
}

数组的初始化问题

std::unique_ptr<char[]> ptrOutBuffer(new char[32 * 1024]);

这种写法不会帮你初始化,需要自己手动初始化

memset(ptrOutBuffer.get(), 0, 32 * 1024);

std::unique_ptr<char[]> ptrOutBuffer(new char[32 * 1024]());               //int 类型也是一样  其它类型没有验证过

这种写法会帮你把数组置0

发布了45 篇原创文章 · 获赞 4 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/ly1390811049/article/details/103478826