C++智能指针shared_ptr使用实例

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/libing_zeng/article/details/80860391

被new/delete折磨过之后,才能真正体会智能指针有多好用。

智能指针是用于管理指针的类。
其中shared_ptr是专门管理那些可能被多个地方用到的指针的类。

C++11中智能指针的头文件是:

#include <memory>

shared_ptr有什么用?

我们知道new和delete是需要一一对应的。
但是,有太多的情况诱惑我们一不小心就将一个指针“到处散”了。
这下基本就已经注定new和delete无法一一对应了。要么,没有delete,导致内存泄漏;要么,多个地方delete了,导致重复释放(一般报错:“段错误”、“bad access”之类)。
讽刺的是,诱惑我们将一个指针到处散的可能是“为了节省内存”(避免“重复”创建类似的对象)

shared_ptr就是为了解决这个问题:
一坨空间大家用,没人用了就释放。

shared_ptr将相当于这坨空间的“管家”,大家都可以用这坨空间,而且大家无需考虑在用完这坨空间之后要不要释放。因为,没人在使用这坨空间时,“管家”会将这坨空间释放。

shared_ptr怎么用?

指针是怎么用的?

1int* a = new int(1);
2, int* func(int* b){}

从代码上看,只需要做两处替换:

shared_ptr<int>”替换“int*”
“make_shared<int>”替换“new int

然后就可以像一般使用指针那样进行操作了。


如上“两处替换”代码举例如下:

std::shared_ptr<Cone> CreateConeShape() {

    /*此处省略若干行*/
    return std::make_shared<Cone>(o2w, w2o, reverseOrientation, height, radius, phimax);
}
shared_ptr<Grid> Robot = make_shared<Grid>(make_shared<Mesh>());
inline void
FM_SV_GlossySpecular::set_cs(shared_ptr<Texture> t_ptr) {
    cs = t_ptr;
}

参考链接:
1,(基本介绍)
https://blog.csdn.net/qq_35116353/article/details/68957414
2,(容易犯的错误)
http://www.cnblogs.com/heleifz/p/shared-principle-application.html

猜你喜欢

转载自blog.csdn.net/libing_zeng/article/details/80860391