1.使用方法
void test2()
{
int* p1 = new int;//new一个对象
int* p2 = new int[10];//new十个对象
int* p3 = new int (10);//new一个对象初始化为10
int* p4 = new int[10]{ 5,4 };//new十个对象第一个初始化5第二个初始化4,其他初始化0(C++11支持)
delete p1;
delete[]p2;
delete p3;
delete[]p4;
}
2.new和malloc不同之处:
对于内置类型与malloc无异,
对于自定义类型,new在开辟时会自动调用构造函数,delete会调用析构函数,而malloc和free不会。
struct ListNode
{
int _val;
ListNode* _next;
ListNode(int val = 0)
:_val(val)
, _next(nullptr)
{
cout << "ListNode()" << endl;
}
~ListNode()
{
cout << "~ListNode()" << endl;
}
};
void test3()
{
cout << "p1:" << endl;
ListNode* p1 = new ListNode;
cout << "p2:" << endl;
ListNode* p2 = (ListNode*)malloc(sizeof(ListNode));
cout << "p1:" << endl;
delete p1;
cout << "p2:" << endl;
free(p2);
}
运行结果:
3.注意:
malloc开空间失败返回空指针
new开空间失败抛异常
了解:
void test4()
{
void* p1 = malloc(1024 * 1024 * 1024);
void* p2 = malloc(1024 * 1024 * 1024);
cout << p2 << endl;
try
{
void* p3 = new char[1024 * 1024 * 1024];
cout << p3 << endl;
}
catch (const exception& e)
{
cout << e.what() << endl;
}
}
运行结果:



