注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

告别迷茫

梦想与现实的差距,就是我们生活的意义。因为我们有差距,我们才会一直积累,在努力。

 
 
 

日志

 
 

c++智能指针  

2014-05-17 10:11:51|  分类: C++作业  李 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

#include
using namespace std;
template
class smart_pointer
{
private:
T* m_pRawPointer;
public:
smart_pointer(){m_pRawPointer = NULL;}
smart_pointer (T* pData) : m_pRawPointer (pData) {} // constructor
~smart_pointer () {delete m_pRawPointer;}; // destructor

// copy constructor
smart_pointer (const smart_pointer & anotherSP)
{
m_pRawPointer = anotherSP->Clone();
}
// copy assignment operator
smart_pointer& operator= (const smart_pointer& anotherSP)
{
if(this == &anotherSP)
return *this;
if(m_pRawPointer != NULL)
delete m_pRawPointer;
m_pRawPointer = anotherSP->Clone();
return *this;
}
T& operator* () const // dereferencing operator
{
return *(m_pRawPointer);
}
T* operator-> () const // member selection operator
{
return m_pRawPointer;
}
};

class Time
{
public:
Time()
{
hour=minute=second=0;
cout<<"Default constructor"<<endl;
}
Time(int h,int m,int s)
{
hour = h;
minute = m;
second = s;
cout<<"Constructor"<<endl;
}
Time(const Time& t)
{
hour = t.hour;
minute = t.minute;
second = t.second;
cout<<"Copy constructor"<<endl;
}
virtual ~Time()
{
cout<<"Destructor"<<endl;
}
void Show()
{
cout<<hour<<":"<<minute<<":"<<second<<endl;
}
Time* Clone()
{
return new Time(*this);
}
private:
int hour,minute,second;
};
// empty stub to enable compilation
int main()
{

smart_pointer tp1( new Time(1,2,3)),tp2(tp1);
//std::unique_ptr:only supported by C++11,please notice the C++ compiler you are using.
//std::unique_ptr tp1(new Time(1,2,3)),tp2;
tp1->Show();
tp2 = tp1;
tp1->Show();
tp2->Show();
return 0;
}

#include<iostream>
using namespace std;

template<typename T>
class smart
{
private:
T* point;
public:
smart(T* data):point(data){};
smart(const smart &another)
{
point=another->clone();
}
smart& operator=(smart &another)
{
if(&another==this)//注意这里的额特殊的情况,如果这个是自己本身的话怎么办啊;?
return *this;
if(point!=NULL)
{
delete point;
}
point=another->clone;
}
T& operator *() const
//注意这里的返回的类型
{
return *point;
}
T* operator->()const//注意这里的返回的类型
{
return point;
}

};
class Time
{
private:
int hour,minute,second;
public:
Time(int a,int b,int c)
{
hour=a;
minute=b;
second=c;
}
Time(Time& a)
{
hour=a.hour;
second=a.second;
minute=a.minute;
}
Time* clone()
{
return new Time(*this);
}
void show()
{
cout<<hour<< ":"<<minute<<":"<<second<<endl;
}
};
int main()
{
smart<Time>p1(new Time(1,1,3)),p2(p1);
p1->show();
p2->show();
return 0;

}

我自己打出来的哟;加油
  评论这张
 
阅读(0)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017