C ++中的智能指针
来源:互联网 发布:oracle数据库日志清理 编辑:程序博客网 时间:2024/06/04 17:50
笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,已出版书籍:《手把手教你架构3D游戏引擎》电子工业出版社和《Unity3D实战核心技术详解》电子工业出版社等。
CSDN视频网址:http://edu.csdn.net/lecturer/144
考虑以下简单的C ++代码与正常的指针。
MyClass *ptr = new MyClass(); ptr->doSomething(); // We must do delete(ptr) to avoid memory leak
智能指针在游戏开发中经常使用,使用智能指针,我们可以使指针以我们不需要显式调用delete的方式工作。 智能指针是一个包含类的操作符,如*和 - >重载的指针。 智能指针类的对象看起来像指针,但可以做许多事情,一个普通的指针不能自动破坏(是的,我们不必明确地使用delete),引用计数等等。
这个想法是使用一个指针,析构函数和重载运算符(如*和 - >)来创建一个类。 由于当对象超出范围时自动调用析构函数,所以动态分配的内存将自动删除(或引用计数可以递减),考虑以下简单的smartPtr类。
#include<iostream>using namespace std; class SmartPtr{ int *ptr; // Actual pointerpublic: // Constructor: Refer http://www.geeksforgeeks.org/g-fact-93/ // for use of explicit keyword explicit SmartPtr(int *p = NULL) { ptr = p; } // Destructor ~SmartPtr() { delete(ptr); } // Overloading dereferencing operator int &operator *() { return *ptr; }}; int main(){ SmartPtr ptr(new int()); *ptr = 20; cout << *ptr; // We don't need to call delete ptr: when the object // ptr goes out of scope, destructor for it is automatically // called and destructor does delete ptr. return 0;}
Output:
20
我们可以编写一个适用于所有类型的智能指针类吗?
是的,我们可以使用模板来编写一个通用的智能指针类, 以下C ++代码演示一样。
#include<iostream>using namespace std; // A generic smart pointer classtemplate <class T>class SmartPtr{ T *ptr; // Actual pointerpublic: // Constructor explicit SmartPtr(T *p = NULL) { ptr = p; } // Destructor ~SmartPtr() { delete(ptr); } // Overloading dereferncing operator T & operator * () { return *ptr; } // Overloding arrow operator so that members of T can be accessed // like a pointer (useful if T represents a class or struct or // union type) T * operator -> () { return ptr; }}; int main(){ SmartPtr<int> ptr(new int()); *ptr = 20; cout << *ptr; return 0;}
Output:
20智能指针在管理资源(如文件句柄或网络套接字)中也很有用。
C ++库以auto_ptr,unique_ptr,shared_ptr和weak_ptr的形式提供智能指针的实现,
这个将在后面给读者介绍。。。。。。
阅读全文
0 0
- C ++中的智能指针
- C/C++: stl 和 boost 中的智能指针
- Boost中的智能指针
- Nebula中的智能指针
- Qt中的智能指针
- Boost 中的智能指针
- WebKit中的智能指针
- WebKit中的智能指针
- C++中的智能指针
- C++中的智能指针
- C++中的智能指针
- android中的智能指针
- OSG中的智能指针
- OSG中的智能指针
- c++中的智能指针
- C++ 中的智能指针
- C++中的智能指针
- C++中的智能指针
- 集合类
- Android svn的使用
- Spring Data JPA
- Python计算两个日期相差的天数,并输出到txt文档中
- GOLANG错误处理最佳方案
- C ++中的智能指针
- 详解OpenGL中的各种变换(投影变换,模型变换,视图变换)(一)——模型变换和视图变换
- Android Handler更新UI
- JSON对象操作小结
- TT:win-client
- 从 MVC 到前后端分离
- 探索源码方法之Vue
- ionic cordova platform add android
- bzoj 4372: 烁烁的游戏 (动态点分治+线段树+LCA)