重点理解:
ScopedPtr e=new Entity();//因为对应的类里面指针是分配在栈上的
//先实例化Entity,”Createrd Entity!“,再进入ScopedPtr(Entity* ptr)进行初始化,因为是栈上的指针,超出了作用域,调用ScopedPtr的delete(delete:调用对应的析构函数),执行Entity的析构函数
#include <string> #include <iostream> //对象的生存期(栈的作用域生存期) //栈:一种数据结构(可以往上堆东西,如果需要访问中间的某个东西,需要把上方的释放掉,才能访问他) class Entity { public: Entity() { std::cout<<"Createrd Entity!"<<std::endl; } ~Entity() { std::cout<<"Destroyed Entity!"<<std::endl; } }; int* CreateArray() { int* array=new int [50];//延长生存期,在堆上分配,便于被调用 return array; } class ScopedPtr { private: Entity* m_Ptr; public: ScopedPtr(Entity* ptr) :m_Ptr(ptr){} ~ScopedPtr() { delete m_Ptr; } }; int main() { { //创建在栈上 //Entity e;//运行到这个}时,栈的生存期结束,调用析构函数,进行摧毁 //创建在堆上 //Entity* e=new Entity; // delete e;//如果没有这行,这作用域一直存在没有被销毁 //在栈上定义,超出作用域销毁 ScopedPtr e=new Entity();//因为对应的类里面指针是分配在栈上的 //先实例化Entity,”Createrd Entity!“,再进入ScopedPtr(Entity* ptr)进行初始化,因为是栈上的指针,超出了作用域,调用ScopedPtr的delete(delete:调用对应的析构函数),执行Entity的析构函数 } std::cin.get(); }
Bean的作用域
2024-02-09 11:50:01 37 阅读