c/c++语言开发共享C++模板学习之智能指针类模板

智能指针的意义 stl中的指针指针 auto_ptr shared_ptr weak_ptr unique_ptr qt中的智能指针 qpointer qsharedpointer qweakpoi

智能指针的意义 stl中的指针指针 auto_ptr shared_ptr weak_ptr unique_ptr qt中的智能指针 qpointer qsharedpointer qweakpointer qscopedarraypoint qshareddatapointer qexplicitilyshareddatapointer

智能指针的意义

现代c++开发库中最重要的类模板之一 c++中自动内存管理的主要手段 能够在很大程度上避开内存相关的问题

因为智能指针使用类的形式封装成一个指针类。所以在不同平台上可能有不同的实现方式。所以了解不同平台中智能指针的实现,对我们来说很有帮助。

stl中的指针指针

auto_ptr

生命周期结束时,销毁指向的内存空间 不能指向堆数组,只能指向堆对象(变量) 一片堆空间只属于一个指针指针对象 多个智能指针对象不能指向同一片堆空间

shared_ptr

带有引用计数机制,支持多个指针对象指向同一片内存

weak_ptr

配合shared_ptrer 而引入的一种智能指针

unique_ptr

一个智能指针对象指向一片内存空间,不能拷贝构造和赋值

示例代码:auto_ptr使用初探

  #include   #include   #include     using namespace std;    class test  {   string m_name;  public:   test(const char* name)   {    cout << "hello, " << name << "." << endl;      m_name = name;   }     void print()   {    cout << "i'm " << m_name << "." << endl;   }     ~test()   {    cout << "goodbye, " << m_name << "." << endl;   }  };    int main()  {   auto_ptr pt(new test("d.t.software"));     cout << "pt = " << pt.get() << endl;     pt->print();     cout << endl;     auto_ptr pt1(pt);     cout << "pt = " << pt.get() << endl;   cout << "pt1 = " << pt1.get() << endl;     pt1->print();     return 0;  }

输出结果:

hello, d.t.software.

pt = 0x9df9008

i’m d.t.software.

pt = 0

pt1 = 0x9df9008

i’m d.t.software.

goodbye, d.t.software.

qt中的智能指针

qpointer

当其指向对象被销毁时,它会被自动置空 析构时不会自动销毁所指向对象

qsharedpointer

引用计数型智能指针 可以被自由拷贝和赋值 当引用计数为0时才删除指向的对象

qweakpointer

qscopedarraypoint

qshareddatapointer

qexplicitilyshareddatapointer

示例代码:qt中的智能指针

  #include   #include   #include     class test : public qobject  {   qstring m_name;  public:   test(const char* name)   {    qdebug() << "hello, " << name << ".";      m_name = name;   }     void print()   {    qdebug() << "i'm " << m_name << ".";   }     ~test()   {    qdebug() << "goodbye, " << m_name << ".";   }  };    int main()  {   qpointer pt(new test("d.t.software"));   qpointer pt1(pt);   qpointer pt2(pt);     pt->print();   pt1->print();   pt2->print();     delete pt;     qdebug() << "pt = " << pt;   qdebug() << "pt1 = " << pt;   qdebug() << "pt2 = " << pt;     qdebug() << endl;     qsharedpointer spt(new test("delphi tang"));   qsharedpointer spt1(spt);   qsharedpointer spt2(spt);     spt->print();   spt1->print();   spt2->print();     return 0;  }

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/607492.html

(0)
上一篇 2021年5月14日
下一篇 2021年5月14日

精彩推荐