首页 / C++ / C++11封装智能指针
C++11封装智能指针
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C++11封装智能指针,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1179字,纯文字阅读大概需要2分钟。
内容图文
引自:https://blog.csdn.net/man_sion/article/details/77196766
//模板类作为友元时要先有声明
template <typename T>
class SmartPtr;
//辅助类
template <typename T>
class RefPtr
{
private:
//该类成员访问权限全部为private,因为不想让用户直接使用该类
friend class SmartPtr<T>; //定义智能指针类为友元,因为智能指针类需要直接操纵辅助类
//构造函数的参数为基础对象的指针
RefPtr(T *ptr):p(ptr), count(1){}
//析构函数
~RefPtr() {
delete p;
}
//引用计数
int count;
//基础对象指针
T *p;
};
//智能指针类
template <typename T>
class SmartPtr
{
public:
//构造函数
SmartPtr(T *ptr) :rp(new RefPtr<T>(ptr))
{}
//拷贝构造函数
SmartPtr(const SmartPtr<T> &sp):rp(sp.rp)
{
++rp->count;
}
//重载赋值操作符
SmartPtr& operator=(const SmartPtr<T>& rhs)
{
++rhs.rp->count; //首先将右操作数引用计数加1,
if (--rp->count == 0) //然后将引用计数减1,可以应对自赋值
delete rp;
rp = rhs.rp;
return *this;
}
//重载*操作符
T & operator *()
{
return *(rp->p);
}
//重载->操作符
T* operator ->()
{
return rp->p;
}
//析构函数
~SmartPtr()
{
if (--rp->count == 0) { //当引用计数减为 0 时,删除辅助类对象指针,从而删除基础对象
delete rp;
} else {
cout << "还有" << rp->count << "个指针指向基础对象" << endl;
}
}
private:
RefPtr<T> *rp; //辅助类对象指针
};
原文:https://www.cnblogs.com/kinglxg/p/13149531.html
内容总结
以上是互联网集市为您收集整理的C++11封装智能指针全部内容,希望文章能够帮你解决C++11封装智能指针所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。