C++ Primer 5th笔记(chap 12)动态内存前瞻教程
•对象的生存期
内存类型定义分配和销毁时机全局对象程序启动时分配,程序结束时销毁静态内存局部static对象类static数据成员第一次使用时分配,程序结束时销毁栈内存定义在函数内的非static对象局部自动对象进入块时分配,离开块时销毁动态内存定义在任何函数之外的变量程序用堆来存储动态分配的对象显式创建,显式销毁
1. new 创建内存对象, delete删除内存对象
//直接初始化方式来初始化一个动态分配的对象
int *pi = new int(2104);
string *ps = new string(10, '9');
vector<int> *pv = new vector<int>{0,1,2,3,4,5,6};
//值初始化,在类型名后加一对空括号即可
string *ps1 = new string;
string *ps2 = new string();
int *pi1 = new int;
int *pi2 = new int();
2. 动态分配的const对象
const int *pci = new const int(1024);
const string *pcs = new const string;//返回一个指向const的指针
3. delete风险
dangling pointer: 被delete后的指针
//这种保护也是有限的, p虽然是空了,但是q还是在的。delete之后得重置指针值为null
int *p(new int(42));
auto q = p;
delete p;
p = nullptr