ACE 智能指针

原创 2015年11月20日 13:41:10
ACE库提供的智能指针的功能是相当强大的。主要有
ACE_Auto_Ptr
ACE_Refcounted_Auto_Ptr
ACE_Intrusive_Auto_Ptr
三个智能指针,其中用的比较多的却容易使用的是前面2个。最后一个需要在自己的类中实现一些规定的函数。在这里主要介绍前面2个指针的使用。
 
ACE_Auto_Ptr
 
ACE_Auto_Ptr 更像RAII的应用一样。资源初始化即获取及其释放的C++惯用手法。也即ACE_Auto_Ptr 会拥有一个指向X对象的指针,并且在ACE_Auto_Ptr 退出作用于(生命期结束)时会自动是否X指针的资源。
如果在用户的应用程序不想删除X对象的指针,那么必须在ACE_Auto_Ptr 生命期结束时必须自己手动release掉X对象的指针。
ACE_Auto_Ptr不是基于引用计数的。当把一个ACE_Auto_Ptr对象赋值给另外一个ACE_Auto_Ptr对象时X对象的指针的所有权会发生转移。也就是X对象的指针有且仅有一个ACE_Auto_Ptr可以拥有该指针。
 
 
ACE_Refcounted_Auto_Ptr 是一个基于引用技术的智能指针,多个ACE_Refcounted_Auto_Ptr对象可以指向同一个X对象的指针。该智能指针提供的功能和ACE_Auto_Ptr大体相当。不同之处在于何时删除 智能指针所管理的X对象的指针。
在所有执行同一个X对象指针的ACE_Refcounted_Auto_Ptr 对象生命期结束时,才删除X对象的指针。
/** 
 * @class ACE_Auto_Basic_Ptr 
 * 
 * @brief Implements the draft C++ standard auto_ptr abstraction. 
 * This class allows one to work on non-object (basic) types 
 */ 
template 
class ACE_Auto_Basic_Ptr 

public: 
  typedef X element_type;
  // = Initialization and termination methods 
  // = 初始化一个智能指针对象,该只能指针管理这个指针p指向的数据。 
  explicit ACE_Auto_Basic_Ptr (X * p = 0) : p_ (p) {}
    // 把智能指针ap所管理的指针数据移交给新的智能指针对象。ap不再拥有对原始指针的管理权限。 
  ACE_Auto_Basic_Ptr (ACE_Auto_Basic_Ptr & ap); 
  // 把 rhs所管理的原始指针的管理权限移交给本对象。如果本对象已经有管理的原始指针数据会先delete之前的指针 
  ACE_Auto_Basic_Ptr operator= (ACE_Auto_Basic_Ptr & rhs); 
  // 释放智能指针对象所管理的原始指针、调用底层的delete/free函数删除指针数据 
  ~ACE_Auto_Basic_Ptr (void);
  // = Accessor methods. 
  // 得到原始指针的数据的引用 
  X operator *() const; 
  // 得到原始指针,不可删除该指针、但是可以修改指针所执行的数据。 
  X *get (void) const; 
  // 得到原始指针、智能指针对象不再拥有对该指针的管理权限。与get不相同 
  // 需要用户自己管理X*指针变量的生命期。 
  X *release (void); 
   
  // 与 operator=一样。会删除掉原先拥有的指针数据 
  void reset (X * p = 0);
  /// Dump the state of an object. 
  void dump (void) const;
  /// Declare the dynamic allocation hooks. 
  ACE_ALLOC_HOOK_DECLARE;
protected: 
  X *p_; 
};
ACE_END_VERSIONED_NAMESPACE_DECL
#if !defined (ACE_LACKS_AUTO_PTR) && \ 
     defined (ACE_HAS_STANDARD_CPP_LIBRARY) && \ 
            (ACE_HAS_STANDARD_CPP_LIBRARY != 0) 
#include 
#if defined (ACE_USES_STD_NAMESPACE_FOR_STDCPP_LIB) && \ 
            (ACE_USES_STD_NAMESPACE_FOR_STDCPP_LIB != 0) 
using std::auto_ptr; 
#endif /* ACE_USES_STD_NAMESPACE_FOR_STDCPP_LIB */ 
#else /* ACE_HAS_STANDARD_CPP_LIBRARY */
/** 
 * @class auto_ptr 
 * 
 * @brief Implements the draft C++ standard auto_ptr abstraction. 
 */ 
template 
class auto_ptr : public ACE_Auto_Basic_Ptr 

public: 
  typedef X element_type;
  // = Initialization and termination methods 
  explicit auto_ptr (X * p = 0) : ACE_Auto_Basic_Ptr (p) {} 
  auto_ptr (auto_ptr & ap) : ACE_Auto_Basic_Ptr (ap.release ()) {}
  X *operator-> () const; 
};
 
template 
class ACE_Auto_Ptr : public ACE_Auto_Basic_Ptr 

public: 
  typedef X element_type;
  // = Initialization and termination methods 
  explicit ACE_Auto_Ptr (X * p = 0) : ACE_Auto_Basic_Ptr (p) {}
  // 得到原始指针 不可删除、但是可以修改指针所指向的数据。 
  X *operator-> () const; 
};

智能指针的标准之争:Boost vs. Loki

智能指针的标准之争:Boost vs. Loki 撰文/马维达  2001 年10 月和2002 年4 月,在美国的华盛顿和荷兰的安的列斯群岛上分别召开了两次C++标准会议。会议的内容...
  • u012519333
  • u012519333
  • 2016年09月10日 16:51
  • 244

c++11智能指针解析——揭开底层面纱,完整理解智能指针

昨天跟同事小小的研究了下关于不同平台下,起因是遇到了一个坑,vs上没有问题,在安卓上却崩溃了。找了半天后发现是c++字节补齐问题,期间包括使用#pragma pack(1)来限定字节对齐方式等各种条件...
  • zy19940906
  • zy19940906
  • 2016年01月07日 17:00
  • 9246

C++四种智能指针小结

C++四种智能指针auto_ptr、scope_ptr、shared_ptr和weak_ptr. 其中auto_ptr是C++98标准化引入的;scope_ptr、shared_ptr和weak_p...
  • e5Max
  • e5Max
  • 2016年01月23日 12:33
  • 2788

Android系统篇之----Android中的智能指针

一、前言今天我们开启Android系统篇的文章了,其实一直想弄,只是之前一直没有太多深入的了解,最近又把这块拿出来好好看了一下,所以想从新梳理一下,来看看Android中的这块知识,首先我们今天来看一...
  • jiangwei0910410003
  • jiangwei0910410003
  • 2016年05月03日 17:27
  • 9637

C++11新特性之智能指针

这一节将从用法上、内存存储上以及生存周期上,对unique_ptr, shared_ptr和weak_ptr做一个深入剖析。unique_ptr   不共享它的指针。它无法复制到其他 unique...
  • u013184159
  • u013184159
  • 2016年04月18日 10:57
  • 6386

C++为什么要用智能指针

首先要理解什么是智能指针。  先来看普通指针,int *p = new int; 这个p 是一个普通指针,指向一个内存块,内存块中存放一个整形数值。 而智能指针是在普通指针的基础上,加上一个引用计...
  • snail_hunan
  • snail_hunan
  • 2015年01月24日 16:22
  • 825

c++11智能指针解析——揭开底层面纱,完整理解智能指针

http://blog.csdn.net/zy19940906/article/details/50470087  本次讨论:c++11之前的auto_ptr; c++11新加的unique_p...
  • gettogetto
  • gettogetto
  • 2017年03月27日 09:52
  • 341

c++ 复制控制和智能指针实现

总结了c++中三种复制控制的场合和具体实现方法,在此基础上设计自己的智能指针类。...
  • wenzhou1219
  • wenzhou1219
  • 2016年06月04日 21:02
  • 1350

四种智能指针的用法和原理

智能指针共分为4种,即boost库中的auto_ptr、scoped_ptr、shared_ptr、weak_ptr。   智能指针的作用是管理一个指针,因为存在以下这种情况:申请的空间在函数结束时...
  • sinat_36118270
  • sinat_36118270
  • 2017年04月04日 13:06
  • 860

C++面试题(四)——智能指针的原理和实现

普通C++面试时候的一般都是这个套路:      1,C++和C相比最大的特点——面向对象:封装,继承,多态。      2,你知道虚函数吗?——实现多态所必须,父类类型的指针指向子类的实例,执行的时...
  • worldwindjp
  • worldwindjp
  • 2014年01月28日 17:00
  • 11611
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ACE 智能指针
举报原因:
原因补充:

(最多只允许输入30个字)