0. 智能指针的意义
- 现代C++开发库中最重要的类模板之一
- C++中自动内存管理的主要手段
- 能够在很大程度避开内存相关的问题
1. STL中的智能指针:auto_ptr
- 生命周期结束时,销毁指向的内存空间
- 不能指向堆数组,只能指向堆对象(变量)
- 一片堆空间只属于一个智能指针对象
- 多个智能指针对象不能指向同一片堆空间
编程说明:auto_ptr使用
#include <iostream>
#include <string>
#include <memory>
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<Test> pt(new Test("Jacob"));
cout << "pt = " << pt.get() << endl;
pt->print();
cout << endl;
auto_ptr<Test> 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时才删除指向的对象