智能指针

悠悠 2022-03-18 11:54 379阅读 0赞

智能指针

  • 在java中如果在堆上开辟内存是不需要手动释放的,我们叫做智能指针;但是在C++中如果用new在堆上开辟了空间,我们需要用delete进行手动释放,否则造成内存泄露。
  • 在C++中,已提供基于模板的智能指针操作,通过#include

    auto_ptr ptr(new int); // int* ptr= new int;

auto_ptr其实是一个类, ptr定义了一个对象

  • 智能指针的实现:

    class A
    {
    public:

    1. A(int a)
    2. {
    3. this->m_a = a;
    4. cout << "A()" << endl;
    5. }
    6. void Print()
    7. {
    8. cout << "a: " << m_a << endl;
    9. }
    10. ~A()
    11. {
    12. cout << "~A()" << endl;
    13. }

    private:

    1. int m_a;

    };

  1. template<class TYPE_>
  2. class Auto_Ptr
  3. {
  4. public:
  5. Auto_Ptr(TYPE_* ptr)
  6. {
  7. m_ptr = ptr;
  8. }
  9. TYPE_* operator->()
  10. {
  11. return m_ptr;
  12. }
  13. TYPE_& operator*()
  14. {
  15. return *m_ptr;
  16. }
  17. ~Auto_Ptr()
  18. {
  19. if (m_ptr != NULL)
  20. {
  21. delete m_ptr;
  22. m_ptr = NULL;
  23. }
  24. }
  25. private:
  26. TYPE_* m_ptr;
  27. };
  28. int main()
  29. {
  30. Auto_Ptr<A> my_ptr = new A(10);
  31. my_ptr->Print(); // my_ptr.m_ptr ->Print();
  32. (*my_ptr).Print(); //(*my_ptr.m_ptr)->Print();
  33. } //main函数结束将自动触发 A的析构,不需要手动释放

待写

share_ptr

weak_ptr

xxxx

发表评论

表情:
评论列表 (有 0 条评论,379人围观)

还没有评论,来说两句吧...

相关阅读

    相关 智能指针

    智能指针 1.引入使用计数 定义智能指针的通用技术是采用一个使用计数。智能指针将一个计数器与类指向的对象相关联。使用计数跟踪该类有多少个对象共享同一指针。使用计数为0时

    相关 智能指针

    智能指针 智能指针的智能,体现在智能指针能够在每次完成工作之后自动释放占用的空间。 我们通常使用的裸指针,使用完成后需要通过delete或者free来进行释放,那么如

    相关 智能指针

    RAII(Resource Acquisition Is Initialization): 资源分配即初始化,定义封装一个类,用来实现调用构造函数时就可完成资源的分

    相关 智能指针

    在C++中,如果指针使用不当,比如没有及时释放指针所指向的内存,或者野指针等,会造成系统发生不可预估的错误,为了防止这一情况的发生,C++ STL提供了一系列智能指针类型 智

    相关 智能指针

    智能指针 在java中如果在堆上开辟内存是不需要手动释放的,我们叫做智能指针;但是在C++中如果用new在堆上开辟了空间,我们需要用delete进行手动释放,否则造