shared_ptr、unique_ptr、weak_ptr、new、delete

一、智能指针:可以自动释放所指向的对象。

三种:shared_ptr(多个指针指向同一个对象)、unique_ptr(独占一个对象)、weak_ptr(指向shared_ptr所管理的对象)

头文件:#include<memory>

shared_ptr:

shared_ptr<int> p=make_shared<int> (43);  //指向43

shared_ptr<list<int>> p;    //指向list

每个shared_ptr都有关联的计数器,当计数器变为零时,它就会自动释放管理的对象。

unique_ptr:

初始化:unique_ptr<double>  p1;

          unique_ptr<int> p2(new int(42));

          unique_ptr<string> p1(new string("stage"));

          没有make_shared<>,不能拷贝和赋值。不支持拷贝()、赋值=

  auto p=p1.release();  //release返回指针.将指针置空

  delete p;

weak_ptr:

指向shared_ptr,指向的对象可能不存在。不会增加shared_ptr的引用计数。

auto p=make_shared<int>(43);

weak_ptr wp(p);

判断对象是否存在:

if(shared_ptr<int> p=wp.lock()){ }  //lock():若非空,返回shared_ptr。

二、直接管理内存:

new、delete

int *pi=new int;  //new,创建int型的对象,返回指向该对象的指针。

int *pi=new int(1024);  //初始化对象

vector<int> *p=new vector<int>{1,2,3};

shared_ptr<int> p(new int(42));

shared_ptr<int> clone(int p){

    return shared_ptr<int>(new int(p));

}

为多个元素分配内存:

int *p=new int[size()];

delete []p; 

指针被delete后,成为空悬指针。空悬指针类似于未初始化的指针,可能造成程序崩溃。因此,在delete后,将nullptr赋予指针。(p=nullptr)

普通指针与智能指针不能混用。

三、动态数组

int *p=new int[40];

string *s=new string[10];

delete []p;  //释放动态数组

unique_ptr<int[]> up(new int[10]);




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值