构造函数和析构函数java_对于默认构造函数和析构函数,“= default”与“{}”有什么不同?...

之间的重要区别

class B {

public:

B(){}

int i;

int j;

};

class B {

public:

B() = default;

int i;

int j;

};

是 B() = default; 定义的默认构造函数被认为是 not-user defined . 这意味着在值初始化的情况下,如

B* pb = new B(); // use of () triggers value-initialization

完全没有使用构造函数的特殊类型的初始化将发生,对于内置类型,这将导致零初始化 . 如果是 B(){} ,则不会发生这种情况 . C标准n3337 § 8.5 / 7说

对类型为T的对象进行值初始化意味着: - 如果T是具有用户提供的构造函数(12.1)的(可能是cv限定的)类类型(第9节),则调用T的默认构造函数(并且如果T没有可访问的默认构造函数,则初始化是错误的); - 如果T是一个(可能是cv限定的)非联合类类型而没有用户提供的构造函数,那么该对象是零初始化的,如果T的隐式声明的默认构造函数是非平凡的,则调用该构造函数 . - 如果T是数组类型,则每个元素都是值初始化的; - 否则,对象被零初始化 .

例如:

#include

class A {

public:

A(){}

int i;

int j;

};

class B {

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值