一 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;
}