首页 > 其他分享 >智能指针之share_ptr

智能指针之share_ptr

时间:2022-11-22 14:39:21浏览次数:52  
标签:指向 point share 内存 shared ptr 指针

内存泄漏:

 

 当指针p和变量y被释放掉,new所开辟的内存不会被释放,这就是内存泄漏。

 

shared_ptr:

 ***注意***use_count是share_ptr的方法,用来记录有多少个指针指向该内存,reset关键字表示重置使指针不再指向原来的对象(而该指针自动指向nullptr)对象被释放(所有指针被重置,也就是没有指针指向该对象了)而指针依然存在。

**注意**当函数退出时,智能指针会被释放,它所指向的内存同样也被释放,而裸指针却不会。

 share_ptr声明指针,make_shared申请一块内存,当指向该内存的所有指针被释放时,这块内存也被释放。

下面是指针及内存的使用方法,推荐第二个

如果想自定义释放规则可以这样用

 

 

裸指针(普通指针)指向make_shared申请的内存使用“get()”方法

 

 reset还可以这样用

 

 当对象A里面嵌套着对象B,即便指向B的指针被重置,B对象也不会被释放

 1 class Inside
 2 {
 3 public:
 4     Inside() {
 5         cout << "Inside appear" << endl;
 6     }
 7     ~Inside() {
 8         cout << "Inside disappear" << endl;
 9     }
10     int var1 = 0;
11 };
12 class Test
13 {
14 public:
15     Test() {
16         cout << "Test appear" << endl;
17     }
18     ~Test() {
19         cout << "Test disappear" << endl;
20     }
21     Inside in;
22     int var2 = 0;
23     int var3 = 0;
24 };
25 int main()
26 {
27     shared_ptr<Test> point;
28     point = make_shared<Test>();
29 
30     shared_ptr<Inside> po(point, &(point->in));
31     po.reset();
32     shared_ptr<Inside> po1(point, &(point->in));
33     system("pause");
34     return 0;
35 }

 

 指向对象A的指针不能指向对象B,指向对象B的指针不能指向对象A

 

标签:指向,point,share,内存,shared,ptr,指针
From: https://www.cnblogs.com/Sandals-little/p/16915009.html

相关文章

  • 剑指offer——Day12 双指针(简单)
    Day122022.11.18双指针(简单)25.合并两个排序的链表自己实现就用两个指针分开指向两个链表并进行遍历,比较之后放入新的列表里。代码如下:classSolution{public:......
  • 剑指offer——Day13 双指针(简单)
    Day132022.11.19双指针(简单)21.调整数组顺序使奇数位于偶数前面自己实现初步想法是一个指针从开头向右移动,移动到偶数停止;另一个指针从数组中间位置向右移动,移动到奇......
  • 剑指offer——Day11 2022.11.17 双指针(简单)
    Day112022.11.17双指针(简单)18.删除链表的节点自己实现直接遍历就行了代码如下:classSolution{public:ListNode*deleteNode(ListNode*head,intval){......
  • VS2019 error C4703: 使用了可能未初始化的本地指针变量 "xx"
    在编译VS的时候,遇到这错误,根据参考资料,在”项目属性“-“C/C++”-“常规”-“SDL检查”,将其改为否。(参考资料提到的另一个方法是将指针声明时初始化为nullptr)另外,......
  • 数组与指针总结
    一.前言在复习C语言和写实验的过程中对于指针数组模块做出的一些初学者的总结与看法。二.指针简介1.从根本来看,指针是一个值为内存地址的变量。可编写如下程......
  • oracle11 share pool,Oracle设置Shared Pool的大小
    SharedPool的大小设置规则如下:1.查到sharedpool设置的合理值,语句如下:select'SharedPool' component,shared_pool_size_for_estimateestd_sp_size,estd_lc_time_s......
  • 函数指针数组
    /* Function:函数指针数组*/#include<stdio.h>#include<stdlib.h>intfunc1(intn){printf("func1:%d\n",n);returnn;}intfunc2(intn){......
  • 调用函数指针
    /* DesignModel:设计模式 Function:使用函数指针列表搭建程序框架*/#include<stdio.h>#include<stdlib.h>inthello(inti);voidhey(inti);intsomeother(vo......
  • 指针
    指针是什么在计算机科学中,指针(pointer)是编程语言的一个对象,利用地址,它的值直接指向(pointsto)存在电脑存储器中的另一个地方的值.由于通过地址能够找所需的的变量单元。......
  • 指针的基础知识(上)
    大家晚上好呀,今天要给大家带来的是关于指针的基础知识点。首先,我们都知道如何一个整型的变量,并赋值给它。如:inti=5;但它在电脑中具体的运行是怎么样的呢?其实啊,首先在电脑内......