#include <iostream>
using std::cout;
using std::endl;
class Data
{
public:
Data(int data = 0)
: _data(data)
{
cout << "Data(int = 0)" << endl;
}
int getData() const
{
return _data;
}
~Data()
{
cout << "~Data()" << endl;
}
private:
int _data;
};
class SmartPointer
{
public:
SmartPointer(Data *pdata)
: _data(pdata)
{
cout << "SmartPointer(Data *)" << endl;
}
Data *operator->()
{
return _data;
}
Data &operator*()
{
return *_data;
}
~SmartPointer()
{
cout << "~SmartPointer()" << endl;
if(_data)
{
delete _data;
_data = nullptr;
}
}
private:
Data *_data;
};
class ThirdLayer
{
public:
ThirdLayer(SmartPointer *psl)
: _sl(psl)
{
cout << "ThirdLayer(SmartPointer *)" << endl;
}
SmartPointer &operator->()
{
return *_sl;
}
~ThirdLayer()
{
cout << "~ThirdLayer()" << endl;
if(_sl)
{
delete _sl;
_sl = nullptr;
}
}
private:
SmartPointer *_sl;
};
int main(int argc, char **argv)
{
SmartPointer pointer(new Data(10));
cout << "pointer->getData() = " << pointer->getData() << endl;
cout << "(*pointer).getData() = " << (*pointer).getData() << endl;
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律