61_智能指针模板类

0. 智能指针的意义

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

1. STL中的智能指针:auto_ptr

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

编程说明:auto_ptr使用

#include 
#include 
#include 

using namespace std;

class Test
{
    string m_name;
public:
    Test(const char* name)
    {
        m_name = name;
        cout << "Hello " << m_name << endl;
    }
    
    void print()
    {
        cout << "I am " << m_name << endl;
    }
    
    ~Test()
    {
        cout << "Goodbey " << m_name << endl;
    }

};

int main()
{
    auto_ptr pt(new Test("Jacob"));
    
    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 Jacob
pt = 0x9c58008
I am Jacob

pt = 0
pt1 = 0x9c58008
I am Jacob
Goodbey Jacob

2.STL中的其它智能指针

  • shared_ptr:带有引用计数机制,支持多个指针对象指向同一片内存
  • weak_ptr:配合shared_ptr而引入的一种智能指针
  • unique_ptr:一个指针对象指向一片内存,不能拷贝构造和赋值

3. Qt中的智能指针

  • QPointer:
    • 优点:当其指向的对象被销毁时,它(QPointer允许有多个)会被自动置空
    • 缺点:析构时不会自动销毁所指向的对象
  • QSharedPointer
    • 引用计数型智能指针
    • 可以被自由地拷贝和赋值
    • 当引用计数为0时才删除指向的对象

你可能感兴趣的:(61_智能指针模板类)