前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >new 语句中类型名后面加一对括号和不加有什么区别

new 语句中类型名后面加一对括号和不加有什么区别

作者头像
ClearSeve
发布2022-02-10 20:50:53
4630
发布2022-02-10 20:50:53
举报
文章被收录于专栏:ClearSeveClearSeve

问题

如果 Test 就是一个很普通的类,那么下面的两句代码有什么不同么?

代码语言:javascript
复制
Test* test = new Test;

Test* test = new Test();

回答

确实会有些差异。

  • C++ 1998 中,有两种初始化类型:zero 和 default 初始化。
  • C++ 2003 中,多了一种:value 初始化。

假设有以下代码,

代码语言:javascript
复制
struct A { int m; }; // POD
struct B { ~B(); int m; }; // non-POD, compiler generated default ctor
struct C { C() : m() {}; ~C(); int m; }; // non-POD, default-initialising m

C++98 中,

  • new A – indeterminate value
  • new A() – zero-initialize
  • new B – default construct (B::m is uninitialized)
  • new B() – default construct (B::m is uninitialized)
  • new C – default construct (C::m is zero-initialized)
  • new C() – default construct (C::m is zero-initialized

C++03 中,

  • new A – indeterminate value
  • new A() – value-initialize A, which is zero-initialization since it’s a POD.
  • new B – default-initializes (leaves B::m uninitialized)
  • new B() – value-initializes B which zero-initializes all fields since its default ctor is compiler generated as opposed to user-defined.
  • new C – default-initializes C, which calls the default ctor.
  • new C() – value-initializes C, which calls the default ctor.
本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022年1月24日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题
  • 回答
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com