智能指针

C++智能指针shared_ptr定位删除器仿函数 2016-03-24

智能指针shared_ptr 用引用计数实现看起来不错,但却存在问题.1.引用计数更新存在着线程安全:2.循环引用--使用一个弱引用智能指针(weak_ptr)来打破循环引用(weak_ptr不增加引用计数)3.定置删除器和空间分配器比如打开一个文件的关闭,用malloc开辟出来的空间,用引用计数实现会出现问题.对改变引用计数时加锁可以解决引用计数更新存在着线程安全.循环引用问题#include<iostream> using namespace std; #include<memory

C++浅析智能指针 2016-03-21

C++浅析智能指针
引言:由于 C++ 语言没有自动内存回收机制,程序员每次 new 出来的内存都要手动 delete.程序员忘记 delete,流程太复杂,最终导致没有 delete,异常导致程序过早退出,没有执行 delete 的情况并不罕见.RAII(Resource Acquisition Is Initialization)资源分配即初始化,定义一个类来封装资源的分配和释放,在构造函数完 ...

智能指针:模拟实现auto_ptr,scoped_ptr,shared_ptr 2016-03-20

    RAII(Resource Acquisition Is Initialization)资源分配即初始化,定义一个类来封装资源的分配和释放,在构造函数完成资源的分配和初始化,在析构函数完成资源的清理,可以保证资源的正确初始化和释放.所谓智能指针就是智能/自动化的管理指针所指向的动态资源的释放.STL--auto_ptrBoost库的智能指针:scoped_ptr/scoped_array/shared_ptr/shared_array/weak_ptr/intrusive_ptr.(ps

C++智能指针的作用,模拟实现auto_ptr,scoped_ptr,shared_ptr,scoped_array,shared_array 2016-03-20

RAII(Resource Acquisition Is Initialization):资源分配即初始化,定义封装一个类,用来实现调用构造函数时就可完成资源的分配和初始化,在调用析构函数就可完成资源的清理,以实现对资源的初始化和清理.智能指针:用自动化或者说智能的指针来实现对动态内存的释放.它是一个类,有类似指针的功能.常见的智能指针有:auto_ptr/scoped_ptr/scoped_array/shared_ptr/shared_array一.AutoPtr首先,先介绍AutoPtr,

智能指针的探索 2015-12-16

!!!对于基本类型来说,new和malloc(delete和free)一样,没区别不是自定义就有问题,(除非自己定义析构,#pragma once //#include<iostream> //#include<string> //using namespace std; ////永远只有一个autoPtr指向它(管理内存),只有一个所有者 ////库中int* p1=new int(1);auto_ptr<int>  ap1=p1;编译不通过(规范),可选择在构造函数

C/C++学习C++中的智能指针 2013-12-08

挺不错的一片博客,转载一下:http://blog.csdn.net/xt_xiaotian/article/details/5714477C++ 智能指针详解一.简介由于 C++ 语言没有自动内存回收机制,程序员每次 new 出来的内存都要手动 delete.程序员忘记 delete,流程太复杂,最终导致没有 delete,异常导致程序过早退出,没有执行 delete 的情况并不罕见.用智能指针便可以有效缓解这类问题,本文主要讲解参见的智能指针的用法.包括:std::auto_ptr.boos

C++动态内存 2013-11-27

动态内存和智能指针静态内存:局部static对象,类static数据成员,定义在任何函数之外的变量栈内存:保存定义在函数内的非static对象堆(自由空间):动态分配的对象头文件:memory智能指针,自动的释放所指向的对象shared_ptr:允许多个指针指向同一个对象unique_ptr:独占所指向的对象weak_ptr:一种弱引用,指向shared_ptr所管理的对象shared_ptr类shared_ptr<string> p1;shared_ptr<vector<int&

C++-智能指针(smarterpointer)自定义删除器(deleter)的方法详解及代码 2013-11-25

智能指针(smarter pointer)自定义删除器(deleter) 的方法 详解 及 代码版权所有, , 如有需要, 请站内联系本文地址: http://blog.csdn.net/caroline_wendy智能指针包含两种"shared_ptr"和"unique_ptr", 由于两种指针的实现方式不同, 所以传递删除器的方式也不同;"shared_ptr"的传递删除器(deleter)方式比较简单, 只需要在参数中添加具体的删除器函数名

C++-动态内存成员的类设计(值和指针) 2013-11-09

"动态内存成员" 的 类设计 (值和指针)本文地址: http://blog.csdn.net/caroline_wendy/article/details/14644313类中包含动态分配的内存成员,在编写类的时候, 需要注意一些地方, 有两种方法, 一种是C++11的标准, 一种是普通方法.方法1 (智能(smart)指针): 类中包含动态内存成员, 最简单的方法是使用智能指针的"shared_ptr",进行管理;因为"shared_ptr"

C++-在文件中查找指定的词出现的行号(shared_ptr) 2013-11-07

在文件中 查找 指定的词 出现的行号 (shared_ptr)在一个指定的文本中, 查找相应的词, 并输出词出现的行号, 和具体的行, 不重复出现行. 由于传输的文本较大, 所以使用指针进行传递, 智能指针的"shared_ptr".代码来自"C++ Primer"; 具体细节, 详见代码注释;代码:/* * cppprimer.cpp * * Created on: 2013.11.7 * Author: Caroline */ #include <iost

C++-shared_ptr拆分智能指针(smartpointer) 2013-11-04

"shared_ptr" 拆分智能指针(smart pointer)两个"shared_ptr"指针, 共享内存数据, 如果其中一个修改, 则对象(object)修改, 两个指针指向的数据均修改.如果想把两个指针拆分开,单独修改某一个, 则需要使用, unique()和reset()方法.如下代码所示, 只修改p, 并保持q不变, 但是两个的使用数量(use_count)均由2变化为1.代码:/* * CppPrimer.cpp * * Created on: 20

C++-shared_ptr的使用方法及代码 2013-11-04

"shared_ptr"的使用方法 及 代码智能指针(smart pointer)是C++11的新特性. 指针在无人使用时, 自动释放动态内存.通过"use_count"计数, 并判断是否无人使用, 从而释放内存.在函数复制(copy)过程中, 默认copy方法是引用相同的潜在元素.如下代码, b1和b2共享元素, 如果范围结束({}), 则b2释放, b1则没有元素, 为了保持b1中的元素, 而使用动态内存.由于VS2012很多C++11特性无法支持, 所以在Ec

Android系统的智能指针轻量级指针、强指针和弱指针的实现原理分析5 2011-09-23

    即如果目标对象的生命周期只受到强引用计数控制或者在目标对象的具体实现中总是允许这种情况发生.怎么理解呢?如果目标对象的生命周期只受强引用计数控制(它的标志位mFlags为0),而这时目标对象又还未被强指针引用过,它自然就不会被delete掉,因此,这时候可以判断出目标对象是存在的:如果目标对象的生命周期受弱引用计数控制(OBJECT_LIFETIME_WEAK),这时候由于目标对象正在被弱指针引用,因此,弱引用计数一定不为0,目标对象一定存在:如果目标对象的生命周期不受引用计数控制(BJ

Android系统的智能指针轻量级指针、强指针和弱指针的实现原理分析4 2011-09-23

 回到外层的if语句中,如果目标对象的生命周期是受弱引用计数控制的,就执行下面语句:impl->mBase->onLastWeakRef(id);   if ((impl->mFlags&OBJECT_LIFETIME_FOREVER) != OBJECT_LIFETIME_FOREVER) {       delete impl->mBase;   }      理论上说,如果目标对象的生命周期是受弱引用计数控制的,那么当强引用计数和弱引用计数都为0的时候,这时候就应该d

Android系统的智能指针轻量级指针、强指针和弱指针的实现原理分析3 2011-09-23

    提供引用计数器的类RefBase我们就暂时介绍到这里,后面我们再结合智能指针类一起分析,现在先来看看强指针类和弱指针类的定义.强指针类的定义我们在前面介绍轻量级指针的时候已经见到了,就是sp类了,这里就不再把它的代码列出来了.我们来看看它的构造函数的实现:template<typename T>   sp<T>::sp(T* other)       : m_ptr(other)   {       if (other) other->incStrong(this);

Android系统的智能指针轻量级指针、强指针和弱指针的实现原理分析1 2011-09-23

         Android系统的运行时库层代码是用C++来编写的,用C++来写代码最容易出错的地方就是指针了,一旦使用不当,轻则造成内存泄漏,重则造成系统崩溃.不过系统为我们提供了智能指针,避免出现上述问题,本文将系统地分析Android系统智能指针(轻量级指针.强指针和弱指针)的实现原理.        在使用C++来编写代码的过程中,指针使用不当造成内存泄漏一般就是因为new了一个对象并且使用完之后,忘记了delete这个对象,而造成系统崩溃一般就是因为一个地方delete了这个对象之

boost智能指针 2011-06-21

boost 提供了一下几种智能指针:scoped_ptr scoped_array shared_ptr shared_arrayweak_ptrscoped_ptr scoped_array用于确保动态分配的对象能够被正确地删除.scoped_ptr 有与std::auto_ptr类似的特性,而最大的区别在于它不能转让所有权而auto_ptr可以.事实上,scoped_ptr永远不能被复制或被赋值!scoped_ptr 拥有它所指向的资源的所有权,并永远不会放弃这个所有权.scoped_arr

SpearParser(一):智能指针类 2011-04-11

Spear Parser简介Spear Parser(以下简称Spear)包含了Collins Model 1的训练部分,对于理解和实现Collins模型来说,是个很好的入门代码.因为M Collins的thesis中提供的代码只包含了Parsing的部分,并没有Training的部分,所以直接看Parsing的代码,理解起来可能有点费劲.而Dan Bikel的貌似有点庞大,对于入门来说,没必要看得那么复杂.所以,我就本着偷懒的原则,到处Google Collins Model的实现,找到了一个

COM智能指针的使用 2010-03-11

用代码说话ComTest实现了两个接口,ICmd和IStr,ICmd里有一个函数--Add,IStr里有一个函数--Cat,此处旨在说明智能指针的用法,故不列出,附件里是工程代码,COM组件就不给出源码了#include <atlbase.h> #include <atlcom.h> #if 0 #import "ComTest.tlb" no_namespace   //第三种方法用到此行 导入tlb类型库 不使用名称空间 #endif //以下二行为第一 二

SMARTPOINTER智能指针 2010-02-25

智能指针(smart pointer):智能指针是其实是一个对象A,它带有一个模针成员变量m_p.用该A管理m_p,通过这种管理机制,可以防止由于new而导致的内存泄漏.智能指针对象在使用时像指针一样.同时也具有一般对象的所有特征.如果要注意以下几点:1,对象之间的赋值:若有A=B,则在赋值时,首先要松查是否为自身赋值.如果不是,则释放A对象成员指针的内存空间,然后要将B中的成员指针赋值于A的成员指针,接着将B中的成员指针置为空,这样可以避免多个指针同时指向一个内存空间而产生多次析构此内存空间的
一周排行
  • ●ip cef全局配置命令用来为no ip route-cache cef接口子命令可以用来选择性地在某些接口上屏蔽●三种转发方式的负载均衡比较no frame-relay inverse-arpno frame-r ...
  • 本文出自 duicky 博客 , 转载请注明出处 http://blog.csdn.net/dui_cky/article/details/6706118
  • 初始化动态分配数组
    圆括号将动态分配的int型数组  初始化为 0:
  • 由于项目需要创建定时器(evevt),所以就百度了一下,发现基本都是来源于一个模板,有些功能还不全,现在自己总结一下. 注:mysql版本是从5.1开始才支持event的.如果你的版本低于5.1就先升级版本吧. 查看 ...
  • 信息科技管理制度体系框架
    本制度体系框架所包含的制度模板,基本覆盖了各类合规和监管要求,并参考了主流行业的最佳管理实 ...
  • 2.安装AD.IIS.IAS.CA.安装过程略,注意windows2003应该为企业版,否则无法添加要颁发的自建证书模板,具体过程可参考[url]http://blog.csdn.net/deflag/archive ...
  • 池的发送平衡配置 修改工作负载平衡的配置设置,包括阈值,效率比,及负载平衡电源管理设置.这不是强制性的命令来配置所有设置.您可以配置一些参数,但不是全部,如果需要的话. 使用前池的发送平衡负载查询- configur ...
  • 第一次来这个论坛,发一个去年在公司给新人培训时讲的东西,欢迎指教  测试经验总结()1.测试人员和用户的联系与区别  黑盒测试人员和用户,都是站在实际应用层进行操作,因此他们对应用层的可用性.实用性非常关 ...
  • 在prototype1.5以前都是先创建一个object然后用$H(),强转成Hash,我用的是1.6的版本,所以直接new Hash(),就可以了,看代码<!DOCTYPE HTML PUBLIC " ...
  • on方法是官方推荐使用的方法比较新 1. on: 多个事件绑定同一个函数 $(document).ready(function(){   $("p").on("mouseover mou ...