知道智能指针很久了,最近改造一个c# 代码,c#自动回收内存,那叫一个爽,c++却没有这个功能,但这个c#代码内存使用情况复杂, 直接改成手动回收相当麻烦,于是 不得不使用智能指针
#include <iostream>
#include <memory>
class Segment
{
public:
int x;
int y;
Segment(int _x, int _y)
{
x = _x;
y = _y;
}
~Segment() {
printf("delete segment\n");
}
};
std::shared_ptr<Segment> func1()
{
Segment* ps = new Segment(3,2);
return std::shared_ptr<Segment>(ps);
//return sps;
// 如下代码也是支持的,外部get()指针的时候要判断下
// return std::shared_ptr<Segment>(NULL);
//return ps;
// 注意,func1 返回 Segment *, 然后 内部 写成以下代码是不行的
//std::shared_ptr<Segment> sps(ps);
//return sps.get();
}
void func2()
{
auto ps = func1();
printf("xx\n");
auto pps = ps.get();
if (pps != NULL)
{
printf("%d\n", pps->x);
}
else
{
printf("failed \n");
}
}
int main()
{
func2();
return 0;
}