我们前面说new delete这些时,new在堆上分配内存,需要delete来删除内存,释放内存,因为堆不会自动的释放内存,而智能指针实现这一自动化的一种方式,这个就是智能指针,当你调用new时,不需要调用delete。他的本质是一个原始指针的包装,当你创建一个智能指针它会调用new并为你分配内存,然后基于你使用的智能指针,这些内存会在某一时刻自动释放,接下来我们看一个例子:
unique_ptr 作用域指针,也就是超出作用域时,它会被销毁,然后调用delete
#include <iostream>
#include <string>
#include <memory>
class Entity
{
public:
Entity()
{
std::cout << "Created Entity" << std::endl;
}
~Entity()
{
std::cout << "Destroyed Entity" << std::endl;
}
void Print() {}
};
int main()
{
//一个作用域
{
//std::unique_ptr<Entity> entity (new Entity()); //不能用 = new Entity 因为unique是需要显示的调用构造函数
std::unique_ptr<Entity> entity = std::make_unique<Entity>();//不会得到一个空指针,更安全
entity->Print();
//std::unique_ptr<Entity> e0 = entity;//会报错&#x