有了GC还会不会发生内存泄漏? 问题的发现 这个问题是我在写C++时考虑到的,C++需要手动管理内存,虽然现在标准库中提供了一些智能指针,可以实现基于引用计数的自动内存管理,但现实环境是很复杂的,我们仍要注意循环引用的问题。还有一个容易被忽视的问题就是对象间关系的“占有”和“非占有”,这个问题其实在 ...
分类:
其他好文 时间:
2016-05-09 18:23:41
阅读次数:
253
1、shard_ptr 管理原生指针,可以有多个shard_ptr对同一个指针拥有所有权。当最后一个shard_ptr放弃对该指针的所有权时,通常直接delete掉该指针,但是也可以在构造时指定deleter, 即自定义释放指针的方式。 shard_ptr放弃对所管理的指针的所有权的情况:1)sha ...
分类:
编程语言 时间:
2016-05-07 19:38:15
阅读次数:
202
c++中的auto_ptr是一个类,却可以像指针一样去使用。使用auto_ptr需要包含头文件#include
例如:auto_ptr ps(new string("hello"));可以像指针一样去使用它,cout size()
引例:
#include
#include
using namespace std;
class A{
public:
A(int x = 0) :m_...
分类:
编程语言 时间:
2016-05-06 12:13:39
阅读次数:
239
提供了对引用计数对象的管理,其实也就是操作引用计数对象,当引用计数为零的时候将对象销毁,值得学习的是juce是如果将引用计数对象和它的智能指针结合在一起的,这个后面再加分析 值得注意的是对象转移的时候,同样是增加新对象的引用计数,减去原有对象的引用计数 ...
分类:
其他好文 时间:
2016-05-04 10:12:26
阅读次数:
204
挺简单的一个类,只是维护了一个成员 shared_ptr<detail::trackable_pointee> _tracked_ptr; 这样看来的话,所谓的track还是基于智能指针,这里注意,track的对象需要从trackable_pointee继承,一个空类,主要还是为了用于标识。 ...
分类:
其他好文 时间:
2016-05-03 23:43:40
阅读次数:
248
shared_ptr
头文件: "boost/shared_ptr.hpp"
几乎所有稍微复杂点的程序都需要某种形式的引用计数智能指针。这些智能指针让我们不再需要为了管理被两个或多个对象共享的对象的生存期而编写复杂的逻辑。当引用计数降为零,没有对象再需要这个共享的对象时,这个对象就自动被销毁了。引用计数智能指针可以分为插入式(intrusive)和非插入式(non-intrusive)两类。前者要...
分类:
其他好文 时间:
2016-05-03 18:15:02
阅读次数:
237
一、前言今天我们开启Android系统篇的文章了,其实一直想弄,只是之前一直没有太多深入的了解,最近又把这块拿出来好好看了一下,所以想从新梳理一下,来看看Android中的这块知识,首先我们今天来看一下:Android中的智能指针的概念,为什么说先看一下智能指针这个知识呢?因为我们在看Android源码的时候,会发现几乎好多地方都用到了这个东东,所以我们在介绍后面的知识点,先来看看这个吧。二、问题...
分类:
移动开发 时间:
2016-05-03 18:06:00
阅读次数:
336
智能指针的陷阱 基本规范: 1.不使用相同的内置指针值初始化(或reset)多个智能指针。 double free 2.不delete get() 返回的指针。 double free 3.不使用get() 初始化或reset另一个智能指针。 double free 4.如果你使用get() 返回的 ...
分类:
编程语言 时间:
2016-04-30 15:35:58
阅读次数:
170
Please indicate the source: http://blog.csdn.net/gaoxiangnumber1
Welcome to my github: https://github.com/gaoxiangnumber1
?读者应具有C++多线程编程经验,熟悉互斥器、竞态条件等概念,了解智能指针,知道Observer设计模式。
1.1 当析构函数遇到多线程
?C++要求...
分类:
其他好文 时间:
2016-04-30 06:40:51
阅读次数:
365
C++常见的内存分配方式有三种: 从静态存储区分配,这里主要是存储局部static对象,类的static成员以及定义在函数之外的变量; 从栈内存分配,这里主要是存储函数内的非static对象; 从堆内存动态分配 其中,静态存储区以及栈内存中的对象,都是由编译器自动创建和销毁,而堆内存中的对象都是由程 ...
分类:
编程语言 时间:
2016-04-28 22:37:22
阅读次数:
235