更多课程 选择中心

C/C++培训
达内IT学院

400-111-8989

C ++中的智能指针知识

  • 发布:C++培训
  • 来源:学习笔记
  • 时间:2017-06-05 19:59

考虑以下简单的C ++代码与正常的指针。

MyClass *ptr = new MyClass(); ptr->doSomething(); // We must do delete(ptr) to avoid memory leak

  智能指针在游戏开发中经常使用,使用智能指针,我们可以使指针以我们不需要显式调用delete的方式工作。 智能指针是一个包含类的操作符,如*和 - >重载的指针。 智能指针类的对象看起来像指针,但可以做许多事情,一个普通的指针不能自动破坏(是的,我们不必明确地使用delete),引用计数等等。
这个想法是使用一个指针,析构函数和重载运算符(如*和 - >)来创建一个类。 由于当对象超出范围时自动调用析构函数,所以动态分配的内存将自动删除(或引用计数可以递减),考虑以下简单的smartPtr类。


  1. #include<iostream>  
  2. using namespace std;  
  3.    
  4. class SmartPtr  
  5. {  
  6.    int *ptr;  // Actual pointer  
  7. public:  
  8.    // Constructor: Refer #/g-fact-93/  
  9.    // for use of explicit keyword   
  10.    explicit SmartPtr(int *p = NULL) { ptr = p; }   
  11.    
  12.    // Destructor  
  13.    ~SmartPtr() { delete(ptr); }    
  14.    
  15.    // Overloading dereferencing operator  
  16.    int &operator *() {  return *ptr; }  
  17. };  
  18.    
  19. int main()  
  20. {  
  21.     SmartPtr ptr(new int());  
  22.     *ptr = 20;  
  23.     cout << *ptr;  
  24.    
  25.     // We don't need to call delete ptr: when the object   
  26.     // ptr goes out of scope, destructor for it is automatically  
  27.     // called and destructor does delete ptr.  
  28.    
  29.     return 0;  
  30. }  

Output:

20

我们可以编写一个适用于所有类型的智能指针类吗?

是的,我们可以使用模板来编写一个通用的智能指针类,以下C ++代码演示一样。

  1. #include<iostream>  
  2. using namespace std;  
  3.    
  4. // A generic smart pointer class  
  5. template <class T>  
  6. class SmartPtr  
  7. {  
  8.    T *ptr;  // Actual pointer  
  9. public:  
  10.    // Constructor  
  11.    explicit SmartPtr(T *p = NULL) { ptr = p; }  
  12.    
  13.    // Destructor  
  14.    ~SmartPtr() { delete(ptr); }  
  15.    
  16.    // Overloading dereferncing operator  
  17.    T & operator * () {  return *ptr; }  
  18.    
  19.    // Overloding arrow operator so that members of T can be accessed  
  20.    // like a pointer (useful if T represents a class or struct or   
  21.    // union type)  
  22.    T * operator -> () { return ptr; }  
  23. };  
  24.    
  25. int main()  
  26. {  
  27.     SmartPtr<int> ptr(new int());  
  28.     *ptr = 20;  
  29.     cout << *ptr;  
  30.     return 0;  
  31. }  

Output:

20智能指针在管理资源(如文件句柄或网络套接字)中也很有用。
C ++库以auto_ptr,unique_ptr,shared_ptr和weak_ptr的形式提供智能指针的实现,

预约申请免费试听课

填写下面表单即可预约申请免费试听!怕钱不够?可就业挣钱后再付学费! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!

上一篇:C / C ++语言中的数组讲解,C / C ++语言数组
下一篇:C语言开发环境vs2017修改快捷键的使用技巧

C语言创建windows窗口实例

C++回调函数是什么?

C++ shared_ptr和动态数组

C语言有哪些关键词,C语言44个关键词大全

  • 扫码领取资料

    回复关键字:视频资料

    免费领取 达内课程视频学习资料

  • 搜索抖音号

    搜索抖音号:1821685962

    免费领取达内课程视频学习资料

Copyright © 2021 Tedu.cn All Rights Reserved 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有

选择城市和中心
黑龙江省

吉林省

河北省

湖南省

贵州省

云南省

广西省

海南省