* @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;
// = 初始化一個智能指針對象,該只能指針管理這個指針p指向的數據。
explicit ACE_Auto_Basic_Ptr (X * p = 0) : p_ (p) {}
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);
// 得到原始指針的數據的引用
X operator *() const;
// 得到原始指針,不可刪除該指針、但是可以修改指針所執行的數據。
X *get (void) const;
// 得到原始指針、智能指針對象不再擁有對該指針的管理權限。與get不相同
// 需要用戶自己管理X*指針變量的生命期。
X *release (void);
// 與 operator=一樣。會刪除掉原先擁有的指針數據
void reset (X * p = 0);
void dump (void) const;
ACE_ALLOC_HOOK_DECLARE;
X *p_;
};
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;
explicit auto_ptr (X * p = 0) : ACE_Auto_Basic_Ptr (p) {}
auto_ptr (auto_ptr & ap) : ACE_Auto_Basic_Ptr (ap.release ()) {}
};
class ACE_Auto_Ptr : public ACE_Auto_Basic_Ptr
{
public:
typedef X element_type;
explicit ACE_Auto_Ptr (X * p = 0) : ACE_Auto_Basic_Ptr (p) {}
X *operator-> () const;
};