实例化对象的3种方式及使用场景

目录

方法1-隐式创建

方法2-显示创建

方法3-new创建

区别与联系


首先定义一个结构体,以链表的节点为例

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);

猜你喜欢

转载自blog.csdn.net/weixin_52514564/article/details/130331995