智能指针的循环引用 class Node { public: shared_ptr<Node> left; shared_ptr<Node> right; Node(int v) { this->value = v; cout << "Constructor" << endl; } ~Node() ...
分类:
其他好文 时间:
2020-06-23 13:13:43
阅读次数:
90
同样的道理,既然C++11只负责sp_counted_base的原子性,那么shared_ptr本身就没有保证线程安全了,加入两个线程同时访问同一个shared_ptr对象,一个进行释放(reset),另一个读取裸指针的值,那么最后的结果就不确定了,很有可能发生野指针访问crash。 ...
分类:
编程语言 时间:
2020-06-14 20:40:22
阅读次数:
64
20、weak_ptr弱引用的智能指针 0、课前秀 + 弱引用指针weak_ptr是用来监视shared_ptr的,不会使引用计数加1,它不管理shared_ptr内部的指针,主要是为了监视shared_ptr的生命周期。 + weak_ptr没有重载操作符 和` `,因为它不共享指针,不能操作资源 ...
分类:
编程语言 时间:
2020-05-25 19:15:37
阅读次数:
66
最近面试的时候面试官问了我一个问题。unique_ptr和shared_ptr到底有什么区别?我一时语塞。回来之后我痛定思痛,决定好好的研究一下智能指针的问题。现在已经研究的差不多了,决定好好的总结一下。 一、智能指针的用途 二、智能指针的特性 三、智能指针的种类与用途 3.1 最原始的智能指针au ...
分类:
其他好文 时间:
2020-05-19 12:55:53
阅读次数:
66
1、shared_ptr 1、shared_ptr多个指针指向相同的对象。shared_ptr使用引用计数,每个shared_ptr的拷贝 都指向相同的能存。每次使用它一次,该对象内部的引用计数加1,指向该对象的shared_ptr指针 每减少一个,该对象内部的引用计数就减1,当引用计数为0时,就自 ...
分类:
其他好文 时间:
2020-05-12 09:42:26
阅读次数:
78
探究share_ptr的底层实现 本人大二菜鸡, 源码看不懂的地方会查资料, 应该大部分人都看得懂 最重要的地方在最后面 首先我们写 class A { } int main() { std::cout shared_ptr a; } 然后ctrl+click进入shared_ptr 是长这样的 展 ...
分类:
其他好文 时间:
2020-05-10 15:01:22
阅读次数:
54
1. new和malloc的区别 2. c++11新特性 编程实现shared_ptr; 3.模板实例化和特化 1. 实例化:通过用具体值代替模板中的参数,从而产生普通类,函数或者成员函数的过程。 隐式实例化:Add(a,c),a的类型是int,c的类型是int。 显式实例化:Add(a,c) 2. ...
分类:
其他好文 时间:
2020-04-21 12:49:41
阅读次数:
69
在确保new动态分配的内存空间在使用结束之后,释放是一件麻烦事。C++11模板库的头文件中定义的智能指针,即shared_ptr模板,就是用来解决这个问题的。 它是将new运算符返回的指针p交给一个shared_ptr对象“托管”,就不用担心要在哪里写delete p语句 实际根本不需要编写这条语句 ...
分类:
编程语言 时间:
2020-03-30 23:06:56
阅读次数:
89
概述 与shared_ptr不同,某个时刻只能有一个unique_ptr指向一个给定对象。当unique_ptr被销毁时,它所指向的对象也被销毁。同时,unique_ptr也没有类似于make_shared的标准库函数,当我们定义一个unique_ptr时,需要将其绑定到一个new返回的指针。因此初 ...
分类:
其他好文 时间:
2020-03-21 12:51:07
阅读次数:
64
在函数模板中使用智能指针时,可能会希望根据指针的类型推导出指针引用的对象类型作为模板参数,于是写出以下代码: shared_ptr<decltype(*objPtr)>(objPtr); 一眼看上去似乎是正确的,然而实际上隐藏着一个问题会导致错误,这要从decltype()推断出的类型说起。 dec ...
分类:
编程语言 时间:
2020-03-18 11:18:27
阅读次数:
95