加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

[C++]12章 动态内存和智能指针

发布时间:2020-12-15 04:53:32 所属栏目:百科 来源:网络整理
导读:?shared_ptr p; 智能指针,可以指向类型为T的对象。 p.get(); 返回p中保存的指针,返回的是一个内置指针,指向智能指针所管理的对象。适用于:我们需要向不能使用智能指针的代码传递一个内置指针。使用get返回的指针的代码不能delete此指针。不要使用get初始

?shared_ptr p; 智能指针,可以指向类型为T的对象。

p.get(); 返回p中保存的指针,返回的是一个内置指针,指向智能指针所管理的对象。适用于:我们需要向不能使用智能指针的代码传递一个内置指针。使用get返回的指针的代码不能delete此指针。不要使用get初始化另一个智能指针或者为另一个智能指针赋值。

p.use_count();返回与p共享对象的智能指针数量。

new:分配内存。

int* pi=new int; //pi指向一个动态分配的、未初始化的无名对象;

shared_ptr p(q); p管理内置指针q所指向的对象;q必须指向new分配的内存,且能够转换为T*类型。

shared_ptrp(u); p从unique_ptr u那里接管了对象的所有权,将u置为空。

shared_ptrp(q,d);? p管理内置指针q所指向的对象;q必须指向new分配的内存,且能够转换为T*类型。p将使用可调用对象d来代替delete.

shared_ptrp(p2,d);? p是shared_ptr p2的拷贝,p将使用可调用对象d来代替delete。

p.reset();

p.reset(q);

p.reset(q,d);

若p是唯一指向其对象的shared_ptr,reset会释放此对象。若传递了可选的参数内置指针q,会令p指向q,否则会将p置空。若还传递了参数d,将会调用d而不是delete来释放q。

重要:1.不要混用普通指针和智能纸指针。

2.不要使用get初始化另一个智能指针,或者为另一个智能指针赋值。

3.不使用相同的内置指针初始化或者reset多个智能指针。

4.不delete get()返回的指针。

5.不使用get()初始化或reset另一个智能指针。

6.如果你使用get()返回的指针,记住当最后一个对应的智能指针销毁后,你的指针就变为无效了。

7.如果你使用智能指针管理的资源不是new分配的内存,记住传递给它一个删除器。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读