지능 포인터 의 실현(스 레 드 안전 을 고려 하지 않 음)
#include
#include
using namespace std;
template
class SmartPtr
{
public:
SmartPtr(T *p = 0):ptr(p),pUse(new size_t(1)){
}
SmartPtr(const SmartPtr &src):pUse(src.pUse),ptr(src.ptr)
{
++*pUse; // +1,
}
SmartPtr& operator=(const SmartPtr &rhs) //
{
++ *rhs.pUse;//
decrUse();
ptr = rhs.ptr;
pUse = rhs.pUse; //
return *this ;
}
T *operator->(){
if(ptr)
return ptr;
throw std::runtime_error("access NULL");
}
const T *operator->() const {
if (ptr)
return ptr;
throw std::runtime_error("access NULL");
}
T &operator*(){
if(ptr)
return *ptr;
throw std::runtime_error("derefferences of NULL");
}
const T &operator*() const{
if(ptr)
return *ptr;
throw std:: runtime_error("dereferece of NULL");
}
~SmartPtr(){
decUse();
}
private:
void decUse(){
if(--*pUse == 0)
{
delete ptr;
delete pUse;
}
}
T *ptr;
size_t *pUse;
};
class Data{
public:
Data(){
cout< t;
t->print();
}catch(const exception & err){
cout< t(new Data);
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.