在堆区内开辟的空间,由程序员手动开辟,手动释放,为了保证用 new 动态分配的内存空间在程序执行后都能被释放是一件麻烦的事情,因此采用智能指针的方式
智能指针是类模板,在栈上创建智能指针对象;
把普通指针交给智能指针对象;
智能指针过期时,调用析构函数释放普通指针的内存
#include <iostream>
#include <vector>
#include <memory>
using namespace std;
class AA
{
public:
string m_name;
AA(){cout << m_name < < "调用构造函数AA\n";}
AA(const string & name) : m_name(name)
{
cout << "调用构造函数AA"<< m_name << endl;
}
~AA() { cout << "调用了析构函数~AA" << m_name <<endl;}
};
int main()
{
// 初始化有三种方法
//第一种:
AA* p = new AA("西施");
unique_ptr<AA>pt1(p); //让智能指针pt1来管理对象p,不需要自己写delete p;
//第二种:
unique_ptr<AA>pt2(new p("西施"));
//第三种
unique_ptr<AA>pt3 = make_unique<AA>("西施"); //c++14标准
}