ACE库提供的智能指针的功能是相当强大的。主要有
ACE_Auto_Ptr
ACE_Refcounted_Auto_Ptr
ACE_Intrusive_Auto_Ptr
三个智能指针,其中用的比较多的却容易使用的是前面2个。最后一个需要在自己的类中实现一些规定的函数。在这里主要介绍前面2个指针的使用。
ACE_Auto_Ptr <X>
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
- */