지능 지침의 실현

1787 단어
스마트 지침의 역할은 사용자가 지침을 더욱 편리하게 사용하여 동적 공간을 신청하고 오류 가능성을 낮추는 것이다.
일반 지침은 동적 메모리를 수동으로 new와 delete를 요청합니다. 메모리를 방출하는 것을 잊어버리면 메모리 유출이 발생합니다.
auto 사용ptr를 동적 대상으로 autoptr 대상이 역할 영역을 떠날 때 동적 메모리가 자동으로 방출됩니다.
auto 가 생기다ptr, 어떤 T 유형에 동적 공간을 신청하고 싶을 때 직접 공간을 신청하지 않습니다(T*p = new T;),대신 autoptr 객체(auto ptr obj pt;)
auto_ptr의 인터페이스는 다음과 같이 설계되었습니다.
// interface
template<class T> class auto_ptr{

	public:
		// 
		explicit auto_ptr(T *p = 0);
		// 
		template<class U> auto_ptr(auto_ptr<U> &rhs);
		// 
		~auto_ptr();
		// 
		template<class U> operator=(auto_ptr<U> &rhs);
		

		T& operator*() const;
		T* operator->() const;

		T& get() const;
		
		T* release();

		void reset(T *p = 0);
	
	private:
		//  
		T *pointee;
		//  
		template<class U> friend class auto_ptr<U>;
};

auto_ptr 클래스의 구현:
template<class T> class auto_ptr{
	
	public:
		// 
		explicit auto_ptr(T *p = 0):pointee(p) {}
		//  
		template<class U> auto_ptr(auto_ptr<U>& rhs):pointee(rhs.release()) {}
		//  
		~auto_ptr() {delete pointee;}
		//  
		template<class U> auto_ptr<T>& operator=(auto_ptr<U> &rhs)
		{
			if(this != rhs)
				reset(rhs.release());
			return *this;
		}
		//  
		T& operator*() const { return *pointee; }
		//  
		T* operator->() const { return pointee; }
		//  
		T* get() const { return pointee; }
		//  
		T* release()
		{
			T *oldPointee = pointee;
			pointee = 0;
			return oldPointee;
		}
		//  p
		void reset(T *p = 0)
		{
			if(pointee != p)
			{
				delete pointee;
				pointee = p;
			}
		}

	private:
		T *pointee;
		template<class T> friend class auto_ptr<U>;
};

좋은 웹페이지 즐겨찾기