相关推荐
-
智能指针与引用计数详解(一)
前言 在C++项目开发中,有时候会遇到悬垂指针的问题,其中提供的解决方案推荐使用智能指针。 在《C++Primer》书13.5章 提到了该技术的具体使用场景和实现。通过反复阅读和代码测试终于了解其中的思想,下面谈谈自己的理解,如果发现有什么问题,请大家批评指正。 什么是智能指针? 智能指针其实就是一个类,除了增加了一些功能外,其因为跟跟普通指针一样。通常情况,new一个对象会申请一块内存,复制或者...
-
C++智能指针学习——小谈引用计数
本文结合源码讨论std::shared_ptr和std::weak_ptr的部分底层实现,然后讨论引用计数,弱引用计数的创建和增减。
-
我的C++实践(16):引用计数实现
我们在做设计时,将接口与实现相分离是一个基本的策略。分离接口与实现主要有两种技术: (1)抽象基类。这个大家比较熟悉,在C++中是声明了纯虚函数的类,在Java、C#等语言中有现成的关键字。设计时将接口部分放在abstract base class中,它们是一个virtual析构函数和一组pure virtual函数。实现部分由各子类担当。这种类称为Interface Class
-
c语言指针的基本使用
文章目录指针变量的定义和初始化指针操作按引用向函数传递参数const 修饰符sizeof 操作符指针表达式和指针运算指针数组函数指针 指针(pointer)是C语言中一个重点和难点,以下是对其基本使用的一些总结,适合入门的同学。除了是对自己的学习的总结之外,也希望能对大家有所帮助。 指针变量的定义和初始化 与C语言其他变量类似,指针也是一种变量,只不过它与其他变量不同,一般变量是直接包含了一个特定...
-
513-带引用计数的智能指针
带引用计数的智能指针:shared_ptr和weak_ptr 带引用计数的好处: 多个智能指针可以管理同一个资源。 C++11 boost库的智能指针拿到标准库里面 带引用计数:给每一个对象的资源,匹配一个引用计数 当1个智能指针引用这个资源的时候,这个资源相应的引用计数就加1,当这个智能指针出作用域,不再使用这个资源的时候,这个资源的引用计数就减1。 当引用计数减1不为0的时候,这个智能指针不使用这个资源了,但是还有其他智能指针在使用这个资源,这个智能指针不能析构这个资源,只能直接走人。 当引用计数减1为
-
C++ 引用计数技术及智能指针的简单实现
文章也发布在 腾讯云+社区 一直以来都对智能指针一知半解,看C++Primer中也讲的不够清晰明白(大概是我功力不够吧)。最近花了点时间认真看了智能指针,特地来写这篇文章。 1.智能指针是什么 简单来说,智能指针是一个类,它对普通指针进行封装,使智能指针类对象具有普通指针类型一样的操作。具体而言,复制对象时,副本和原对象都指向同一存储区域,如果通过一个副本改变其所指的值,则通过另一对象访问的值也会...
-
实现指针引用计数的类 Reference Counter
使用一个指针指向一个动态对象,当不再使用的时候要销毁这个对象。如果会有多个指针指向同一个动态对象,那么需要知道,什么时候才能销毁这个对象。提前销毁对象可能导致指针指向并且销毁一个不存在的对象,不销毁则会是内存泄露。因此,有必要为指针设计一个引用计数机制,这个机制封装在一个类中。其实这就是一种智能指针。 http://blog.csdn.net/ojshilu/article/details/19
-
一个简单的引用计数实现体类
本文主要介绍一个简单的引用计数实现体类,它被引用计数对象(请参考:http://blog.csdn.net/hello_wyq/archive/2006/07/07/888606.aspx)所使用。它私用继承了Noncopyable对象(请参考:http://blog.csdn.net/hello_wyq/archive/2006/07/07/888550.aspx),以便禁止对象的拷贝和赋值操
-
引用计数的智能指针的实现与思考
引用计数的智能指针的实现与思考 引用计数在软件开发中是一项非常重用的技术,它可以说是无处不,我们在不知不觉中都在和它打交道,比如 Windows上的COM和Handle, Mac上的ref句柄,脚本语言中的垃圾回收技术。 但是在C++标准库中,却没有内置支持引用计数的技术的支持,下面我们就尝试封装自己的基于引用计数的智能指针。 一般来说,计数方法的实现有2种,内置和外置: 内置指的是对象本身就有计数功能,也就是计数的值变量是对象的成员;外置则是指对象本身不需要支持计数功能,我们是在外部给它加上这个计数能力
-
一个简单引用计数智能指针的实现
template <typename T> class SharedPtr{ public: SharedPtr() = delete;//不允许未初始化的智能指针,防止使用空指针 SharedPtr(const SharedPtr&) noexcept; //拷贝构造 SharedPtr(T*) noexcept; //shallow copy ...
-
记录c++知识--------实现一个行为像指针的类(引用计数)
class hasptr { private: string *ps; int i; int *use; public: //这种默认构造函数挺好的,即使没给值,也会自动给一个默认空值 hasptr(const string &s = string()) :ps(new string(s)), i(0), use(new int(0)) {}; //拷贝构造函数 hasp...
-
C++智能指针之shared_ptr
shared_ptr是一个引用计数智能指针,用于共享对象的所有权。它可以从一个裸指针、另一个shared_ptr、一个auto_ptr、或者一个weak_ptr构造。 1、shared_ptr的构造函数 (1) 这个构造函数获得给定指针p的所有权。参数p必须是指向T的有效指针。构造后引用计数设为1。 template <class T> explicit shared_ptr(T* ...
-
实现一个带引用计数的shared_ptr智能指针
*自定义一个myShared_ptr结构,包含引用计数、运算符、->运算符 // 自定义 shared_ptr 智能指针 template<class T> class myShared_ptr { public: // 构造函数 myShared_ptr(T* ptr) : _ptr(ptr), _pCount(new int(1)) {} // 拷贝构造函数 myShared_ptr(const myShared_ptr& sp) : _ptr(sp._ptr)
-
自己实现一个带引用计数的智能指针,根据源码
//存储资源引用计数的表,使用单例模式因为模板在类型推导的时候 //会因为类型的不同从而产生不同的表,对于引用计数来说会产生错误 //因为这两张表应该在同一张表中,在调试中遇到的这个问题 class ResTable { public: typedef map::iterator iterator; /* 快加载:没调用getInstance函数,对象实例就生成了 慢加载:第一次调用ge
-
通过引用计数实现智能指针
通过模板和引用计数的方式实现智能指针,需要两个类:智能指针类SmartPtr,和智能指针辅助类SmartPtrHelper,其中用户接触到是SmartPtr类,而SmartPtr类通过SmartPtrHelper管理指针的内存和计数。具体实现如下: SmartPtrHelper类 //模板类作为友元时要先有声明 template &lt;typename T&gt; class SmartP...
-
java引用计数
http://zhangjunhd.blog.51cto.com/113473/53092/ http://thatmonkey.blog.51cto.com/7935609/1384463
-
【C++】智能指针之引用计数的实现
本文将简单的介绍,C++11中的智能指针的引用计数大致是如何实现的。部分内容节选自 C++ primer 5th。
-
引用计数的智能指针——sharedptr的模拟实现
在处理异常时,由于要抛出异常,经常导致申请空间未释放,打开的文件未关闭等情况,这时,智能指针便应运而生。 智能指针功能和普通指针最大的区别就在于智能指针在退出堆栈时会自动调用析构函数而不会存在忘记释放空间的问题,而且它任然可以对指针进行赋值、解引用等操作。那就来简单的实现一下智能指针吧。 template class SharedPtr { public: SharedP
-
C++ 引用计数
C++没有像java那样的垃圾回收机制,但是我们可以实现一个。一种很简单的方式就是使用引用计数。它实际上是一种用对象来管理资源的方式,因为普通的栈上的对象在离开作用域时会调用对应的析构函数,根据这个特性,可以实现用于对指针进行管理的类。 下面以一个对int*指针的管理来说明引用计数是如何实现的。 当我们创建一个int型指针时:int *p=new int(10); 在最后我们需要调用dele
2 楼 yangsong158 2015-07-23 09:58
汇智的教程做得相当不错。
关键是还免费。
非常感谢无私奉献!
1 楼 mangguo 2015-07-22 17:11