实例化对象的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);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值