[c++基础] 智能指针
来源:互联网 发布:智能推送 算法 编辑:程序博客网 时间:2024/05/09 00:14
设计原理:将基本类型指针封装为类对象指针(这个类肯定是个模板,以适应不同基本类型的需求),并在析构函数里编写delete语句删除指针指向的内存空间。
auto_ptr
则C++会把m_example所指向的内存回收,使m_example1 的值为NULL,所以在C++中,应绝对避免把auto_ptr放到容器中。即应避免下列代码:
vector<auto_ptr<MyClass>>m_example;
当对容器操作的时候,赋值传递会使容器中多个元素被置为NULL,而这不是我们想看到的。
unique_ptr
避免了指针指向有效数据的问题,会出现编译错误提示,即:
unique_ptr<string> pu1(newstring ("hello world"));
unique_ptr<string> pu2;
pu2 = pu1; // not allowed
unique_ptr<string>pu3;
pu3= unique_ptr<string>(new string("Yo!")); //allowed
将一个unique_ptr赋给另一个时,如果源unique_ptr是个临时右值,编译器允许这样做;如果源unique_ptr将存在一段时间,编译器将禁止这样做
还可以用std::move()将一个unique_ptr赋给另一个
unique_ptr<string> ps1, ps2;
ps1 = demo("hello");
ps2 = move(ps1);
ps1 = demo("alexia");
cout << *ps2 << *ps1 << endl;
另外, 可将unique_ptr存储到STL容器,只要不调用将一个unique_ptr复制或赋给另一个的相关算法(如sort())
Shared_ptr和auto_ptr最大的区别就是,shared_ptr解决了指针间共享对象所有权的问题,也就是auto_ptr中的赋值的奇怪问题。所以满足了容器的要求,可以用于容器中。
传送门
0 0
- 智能指针基础
- C++ 基础 : 智能指针
- [c++基础] 智能指针
- c\c++复习基础要点10---智能指针
- c++:智能指针
- C++:智能指针
- 【C++】智能指针
- 【C++】智能指针
- C++PJ智能指针
- 【c++】智能指针
- 【C++】智能指针auto_ptr
- C++,智能指针
- C++,boost智能指针
- 智能指针模拟C
- [C++]智能指针
- 【C++】 浅析智能指针
- C++_智能指针
- C++:初识智能指针
- IEEE754标准
- 本地xampp集成环境phpmyadmin导入较大的.sql文件
- 区分编译器不同版本、不同操作系统的宏
- rails 中的模型验证validate
- 自动化运维工具Ansible详细部署
- [c++基础] 智能指针
- Niushop开源商城微信分销接口类
- Unity基础包 FirstPersonController下的MouseLook 脚本研究
- C++指针、数组、字符串数组、cout几者关系说明
- 优化算法——拟牛顿法之DFP
- 纯CSS绘制三角形(各种角度)
- Android自定义控件实例(2)——AndroidTableView,支持行列合并
- 关于android沉浸式状态栏功能
- 运动目标检测——研究现状