⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 safe_ptr.h

📁 遗传算法的一个库
💻 H
字号:
#ifndef __GradSoft_safe_ptr_h#define __GradSoft_safe_ptr_h/* * part of Grad-Soft C++ ToolBox. * (C) Grad-Soft Ltd, Kiev, Ukraine. 2002 * http://www.gradsoft.kiev.ua * $Id: safe_ptr.h,v 1.6 2002/03/27 20:02:34 rssh Exp $ */#ifndef __GradSoft_ptrsPostConfig_h#include <GradSoft/ptrsPostConfig.h>#endif/** * **/namespace GradSoft{///template<typename T>class safe_ptr;///template<typename T>struct safe_ptr_traits{ typedef safe_ptr<T> ptr_type;};#ifndef HAVE_PARTIAL_SPECIALIZATION/*@{*/namespace internal { // All primitive types must be here, i. e. if you want correct ptr to // primitive type, then just insert empty ptr_base definition here in case // if you compiler does not support partial specialization.template<>class ptr_base<int,safe_ptr_traits<int> >{public: typedef int element_type;};template<>class ptr_base<unsigned int,safe_ptr_traits<unsigned int> >{public: typedef unsigned int element_type;};}/*@}*/#endif/** * safe_ptr : pointer wrapper, which throw exception on NULL access. **/template <typename T> class safe_ptr:public internal::ptr_base<T,safe_ptr_traits<T> >{private:  T* p_;public:  /**   * constructor   **/  explicit safe_ptr(T* p = NULL) throw() : p_(p) {}  ///  safe_ptr& operator=(T* p)  { p_=p; return *this; }  ///  T* operator->() const throw(NullPointerException)    { return safe_get(); }   ///  T& operator*() const throw(NullPointerException)    { return *safe_get(); }   /**   * return pointer.   **/  T* get() const throw() {    return p_;  }  /**   * return wrapped pointer, if one is not Null;   * otherwise throw NulPointerException.   **/  T* call_get() const throw(NullPointerException)   { return safe_get(); }protected:  T*  safe_get() const throw(NullPointerException)  { if (p_==NULL) throw NullPointerException();    return p_; }};}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -