内存管理
c++中创建用new和delete
New和delete要相互匹配可以减少错误。
New对delete;
New[]对delete;
#include<iostream>
using namespace std;
int main(){
int *p1=new int;
*p1=3;
cout<<*p1<<endl;
int *p2=new int[2]{1,2};
cout<<p2[0]<<" "<<p2[1]<<endl;
delete p1;
delete[]p2;
return 0;
}

new会调用默认构造和析构。
#include<iostream>
using namespace std;
struct A{
A(int a=0,int b=0)
:_a(a),_b(b)
{
cout<<"init "<<a<<" "<<b<<endl;
}
~A(){
cout<<"~A()"<<endl;
}
int _a,_b;
};

捕获异常
int main(){
try{
A *p1=new A[1024*1024*1024*10];
delete p1;
}catch(const exception&e){
cout<<e.what()<<endl;
}
return 0;
}

对比c语言的malloc和free;
New会初始化,
Delete会调用析构。
定位new;
创建指针p2指向一个A类大小的空间。
A*p2=(A*) operator new(sizeof(A));
不会初始化
New(p2)A(1);
调用构造函数初始化。
p2->~A()析构。
Operator delete (p2);
释放空间;
一般直接使用new,delete。