C++11智能指针之shared_ptr的使用(1)
来源:互联网 发布:怪物猎人ol运营数据 编辑:程序博客网 时间:2024/05/16 06:50
先来看一段简单的代码:
#include <iostream>#include <memory>using namespace std;void test_smartpointer(shared_ptr<int> sp){(*sp)++;}void test_pointer(int *p){(*p)++;}int main(){int n1 = 5, n2 = 5;shared_ptr<int> sp (new int(n1))test_smartpointer(sp); n1=*sp;test_pointer(&n2);cout << "n1 = " << n1 << " n2 = " << n2 << endl;return 0;}
输出结果为:n1 = 6 n2 = 6
智能指针的使用稍显麻烦,出于我们之前使用指针的习惯,文中的shared_ptr<int> sp(new int(n1))可否换成shared_ptr<int> sp(&n1)呢?
如此一来不就省去了后面的n1=*sp吗?
答案是不能。因为shared_ptr对自己管理的内存会自动释放,而在本段代码中,n1是栈上的对象,会自动被清理。那么问题来了,n1可能会被清理两次。
我在使用gcc4.6.3发现此问题后,又分别使用VS和mingw做了验证。
奇怪的是在vs2013社区版中不会报错,mingw也没报错。
后面我又找了一些对C++11/14完全支持的在线编译器,结果在直接传入栈上对象的地址后果然报错了。
所以在使用微软的编译器或mingw的时候需谨慎。遇到有疑惑的代码及时使用gcc/clang,或者在线编译器验证。
除了上面我用的那个之外,iso C++的网站上也提供了更多在线编译器。
0 0
- C++11智能指针之shared_ptr的使用(1)
- C++:智能指针之shared_ptr
- C++:智能指针-TR1的shared_ptr和weak_ptr使用介绍
- C++:智能指针-TR1的shared_ptr和weak_ptr使用介绍
- C++11智能指针之使用shared_ptr实现多态
- 智能指针之shared_ptr
- 智能指针之 shared_ptr
- 智能指针之shared_ptr
- 智能指针之shared_ptr
- 智能指针之shared_ptr
- 智能指针之 shared_ptr
- 智能指针之shared_ptr
- 智能指针之shared_ptr
- C++ TR1 智能指针shared_ptr的使用(转)
- 智能指针shared_ptr组件的使用
- c++智能指针的使用,auto_ptr,shared_ptr
- C++11智能指针之shared_ptr、weak_ptr
- C++11智能指针之shared_ptr、weak_ptr
- ORA-00845: MEMORY_TARGET not supported on this system
- 浅析ConcurrentHashMap
- 构造函数与创建对象
- linux centos yum安装LAMP环境
- JOS lab4 Lapic与Intel多核系统
- C++11智能指针之shared_ptr的使用(1)
- uC/OS如何保存局部变量到任务堆栈中
- 1.2.2 Box of Bricks
- 《C++》03 C++ 变量作用域
- [面试] 算法(八)—— 树
- 第一次用阿里云
- Module Thinking之路径依赖
- Windows修复:使用安装光盘修复损坏的Windows系统
- 【Android】由浅到深理解AIDL