디자인 모드 의 프 록 시 모드 (Proxy)

2195 단어 proxy
포인터 만 프 록 시 모드 의 하나 입 니 다.
지능 지침 실현 에 주의해 야 할 문제:
1. 구조 함 수 는 디 스 플레이 구 조 를 가리킨다.
2. 구조 함 수 를 복사 하여 이전 지침 을 끊 은 다음 이전 지침 의 값 으로 현재 지침 을 초기 화 합 니 다.
3. 할당 함 수 는 이전 지침 을 끊 은 다음 현재 지침 이 가리 키 는 메모 리 를 풀 고 마지막 으로 이전 지침 으로 현재 지침 을 할당 해 야 합 니 다.
4. 매개 변 수 는 인용 으로 임시 대상 이 생기 지 않도록 합 니 다.
코드 는 다음 과 같 습 니 다:
#include <iostream>

#include <string>









/************************************************************************/

/*             												*/

/************************************************************************/



template<typename T>

class auto_ptr

{



public:

	explicit auto_ptr(T *pointer = NULL):m_pointer(pointer){}

	auto_ptr(const auto_ptr<T>& rhs):m_pointer(rhs.release()){}

	auto_ptr<T>& operator=(auto_ptr<T>& rhs)

	{

		if (this != &rhs)

		{

			m_pointer = reset(rhs.release());

			return *this;

		}

	}

	T& operator*(){return *m_pointer;}

	T* operator->(){return m_pointer;}

	T*  get() const

	{

		return m_pointer;

	}

	T* release()

	{

		T* oldpointer = m_pointer;

		m_pointer = NULL;

		return oldpointer;

	}



	void reset(T *p = NULL)

	{

		if (p != m_pointer)

		{

			delete m_pointer;

			m_pointer = p;

		}



			

	}

private:

	T *m_pointer;

};





int main()

{



	return 0;

}


 
큰 그림 열기 지연
#include <iostream>

#include <string>



using namespace std;









class Image

{

public:

	Image(string name):m_imagename(name){}

	virtual void show()

	{



	}

protected:

	string m_imagename;

};



class BigImage:public Image

{

public:

	BigImage(string name):Image(name){}

	virtual void show()

	{

		cout << m_imagename <<" show big image" <<endl;

	}

};

class BigImageProxy:public Image

{

public:

	BigImageProxy(string name):Image(name),m_pimage(0){}

	virtual void show()

	{

		if (m_pimage == NULL)

		{

			m_pimage = new BigImage(m_imagename);

		}

		m_pimage->show();

	}

private:

	BigImage* m_pimage;

};



int main()

{

	Image *pimage = new BigImageProxy("big.jpg");

	pimage->show();

	return 0;

}


좋은 웹페이지 즐겨찾기