C++智能指针

54 阅读1分钟

一 new 和 delete

在c++中,我们通过new在堆上申请了内存,然后需要我们手动delete

class Entity{

public:    
    Entity(){
        cout<< "Create Entity"<< endl;
    }

    ~Entity(){
        cout<< "Delete Entity"<< endl;
    }
};

int main(){
{
   //栈上分配内存,超出作用域会被自动释放
   Entity e0;
}

{
   //堆上分配内存,超出作用域也不会被释放
   Entity* e1 = new Entity();
   // delete e1;
}
return 0;
}

这段代码如果我们先把堆上分配内存的部分注释掉,看到输出如下

Create Entity
Delete Entity

而将栈上分配内存注释掉,我们看到输出如下,没有delete的部分。

Create Entity

只有执行了 delete 操作,才能看到对应的日志。

二 unique_ptr和shared_ptr

int main(){
{
    unique_ptr<Entity> entity1 = make_unique<Entity>();   
    //    unique_ptr<Entity> e = entity; 独占指针,不可用
}//走出作用域后,会自动释放
return 0;
}

再看看

int main(){
{
    shared_ptr<Entity> e0;
{
    shared_ptr<Entity> entity = shared_ptr<Entity>(new Entity());
    e0 = entity;
}
} //走出这个作用域,才会打印Delete Entity
return 0;
}