静态内存:局部static对象、类static成员、全局变量。
栈内存:函数内非static对象。
分配在静态或栈内存中的对象由编译器自动创建和销毁,对于栈对象,仅在其定义的程序块运行时才存在;static对象在使用之前分配,程序结束时销毁
堆内存:用于动态分配,要显示销毁。
智能指针定义在头文件memory中。
智能指针为模板,创建时需提供类型,默认初始化的智能指针中保存着一个空指针。
使用make_shared函数分配使用动态内存,使用时与模板类相同,在函数名后跟尖括号给出类型名。
通常可以用auto来定义对象保存make_shared的结果,例如:
auto p = make_shared<int>(10);
拷贝或赋值操作:
auto p1(p);
当拷贝一个shared_ptr时,引用计数的计数器会递增,当给shared_ptr赋一个新值或是销毁时,计数器会递减,当计数器为0时,会自动释放自己管理的对象。
auto r = make_shared<int>(10); //r指向的对象由一个引用者
r=q; //r指向别的对象,r原指的对象没有引用者,自动释放
原文:https://www.cnblogs.com/wshr007/p/10511546.html