• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

【转】C++ std::tr1::shared_ptr使用

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

看《effective c++》,作者一直强调用std::tr1::shared_ptr,比起auto_ptr好多了。

shared_ptr采用引用计数,多个指针可以指向同一个对象;auto_ptr就不能,只能运行一个指针指向一个对象:如果要指针赋值,那么原来的指针要放弃对该对象的所有权。

恩,以后都用shared_ptr。

shared_ptr在最新的c++11中,已经被列入了标准指针,而auto_ptr则出局了。

说了那么多,shared_ptr采用RAII技术,是防止内存泄露的神器。

按bnu_chenshuo的说法,他最后一次看见代码中的内存泄露还是04年他做实习生的时候。

而C++沉思录的作者AndrewKoenig也极力推荐使用标准库,不用指针。

看下面的程序,我new了一个对象,并没有在程序中使用delete,但是,运行程序,其构造函数仍然运行!这就是shared_ptr,如果要预防内存泄露,它就是最佳选择!

 1 # include <iostream>
2 # include <tr1/memory>
3 using namespace std;
4 class A {
5 public:
6 A() {
7 cout << "construct A!!!" << endl;
8 }
9 ;
10 ~A() {
11 cout << "destruct A!!!" << endl;
12 }
13 ;
14 };
15 class B: public A {
16 public:
17 B() {
18 cout << "construct B!!!" << endl;
19 }
20 ;
21 ~B() {
22 cout << "destruct B!!!" << endl;
23 }
24 ;
25 };
26 int main() {
27 // B* ptrB0 = new B();
28 std::tr1::shared_ptr<B> ptrB1(new B);
29 }

运行结果:

 

construct A!!!
construct B!!!
destruct B!!!
destruct A!!!

转自:http://blog.csdn.net/randyjiawenjie/article/details/6710066




鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
[转]使用微软消息队列实现C#进程间通信发布时间:2022-07-13
下一篇:
C语言博客作业--字符数组发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap