#include<iostream>
#include<string>
using namespace std;
class entity
{
public:
entity()
{
std::cout << "Created entity!" << std::endl;
}
~entity()
{
std::cout << "Destroyed entity." << std::endl;
}
};
int* creat()
{
int* array = new int[50];//new确保创建变量在堆上
return array;
}
class ScopedPtr//基本作用域指针类
{
private:
entity* m_ptr;
public:
ScopedPtr(entity* ptr)
:m_ptr(ptr)
{
}
~ScopedPtr()
{
delete m_ptr;
}
};
int main()
{
int* a = creat();
{
//entity *e =new entity();//在栈上分配对象,超出作用域自动delete
unique_ptr<entity>e(new entity());//CSDN Amelie_xiao 【C++11】 之 std::unique_ptr 详解
//通过断点处理可以更形象看到即使有new依然被delete,同标准库的unique_ptr概念
//entity e;//基于栈变量一出作用域便释放掉了
//entity* e = new entity();//在堆中声明会持续到程序结束
//C++中的new会在heap(堆)上分配内存,而且不会自动回收空间。可以调用delete手动删除
}
std::cin.get();
}
c++栈 堆变量生存周期简介
最新推荐文章于 2024-10-09 10:07:13 发布