지능 지침의 일종의 실현
T* get()이 원래 포인터를 반환합니다.
void reset () 원시 포인터가 가리키는 대상 분석
T* operator -> () 원래 포인터로 돌아가기
T&operator*()가 원래 포인터가 가리키는 객체의 참조를 반환합니다.
T* release () 반환 시작 포인터 관리권
상기 기능 요구를 바탕으로 스마트 지침을 실현하는 것은 다음과 같다.
#pragma once
template<class T>
class smart_ptr{
public:
//smart_ptr():m_p(0){}
smart_ptr(T *p):m_p(p){}
~smart_ptr();
T* get() {return m_p;}
void reset();
T* release();
T* operator -> () {return m_p;}
T& operator *() {return *m_p;}
private:
smart_ptr(smart_ptr &); // declare copy constructor and operator = as private to avoid misuse smart_ptr
smart_ptr& operator =(smart_ptr&);//
T *m_p;
};
template<class T>
T* smart_ptr<T>::release()
{
T* temp = m_p;
m_p = 0;
return temp;
}
template<class T>
void smart_ptr<T>::reset()
{
if (m_p)
{
delete m_p;
m_p = 0;
}
}
template<class T>
smart_ptr<T>::~smart_ptr()
{
reset();
}
테스트 클래스
class testClass
{
public:
testClass(){cout<<"construction testClass"<<endl;}
~testClass(){cout<<"destruction testClass"<<endl;}
void print(){cout<<m_str<<endl;}
string m_str;
};
테스트 코드
#include <stdio.h>
#include <tchar.h>
#include <string>
#include <ctime>
#include <map>
#include <iostream>
#include <algorithm>
#include "header.hpp"
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
smart_ptr<testClass> sp1(new testClass);
sp1.get()->m_str = "111";
sp1->print();
(*sp1).m_str = "2222";
sp1->print();
//smart_ptr<testClass> sp2 = sp1;//compile error since copy constructor is declared as private
testClass *p = sp1.release();
delete p;
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.