目录
首先定义一个结构体,以链表的节点为例
struct ListNode {
int val;
struct ListNode next;
ListNode(int x) :val(x)
{
}
};
方法1-隐式创建
该方法直接创建了一个名为node的对象。
ListNode node(10);
方法2-显示创建
该方法也创建了一个名为node的对象,但是写法较为复杂,易懂但繁琐。
ListNode node=ListNode(10);
方法3-new创建
该方法创建了一个名为node的对象并且返回一个指针。
ListNode* node=new ListNode(10);
区别与联系
方法1和方法2没什么区别,写法不同。方法3一般用于后续代码中需要输入的变量为指针类型,此外,有一些特殊场景需要特别使用方法3,例如,假设现在节点结构体定义如下:
struct ListNode {
int val;
struct ListNode* next;
ListNode(int x) :val(x), next(NULL)
{
}
};
同时我需要获取实例化对象后的指针,那么就可以使用:
ListNode* node=new ListNode(0);
或者使用如下的方法也可以,但是这样要写2行代码,比较不美观,因此推荐方法3:
ListNode pHead2_temp(10);
ListNode* pHead2 = &pHead2_temp;
同时强调,使用如下方法,是不可行的,编译器会认为局部变量不能取地址:
//错误方法
ListNode* node=&ListNode(10);