trivial/nontrival函数

这里想谈一下,关于c++中的trivial和nontrivai的成员函数,主要对应于以下几个函数:

  • 默认构造函数(default constructor)
  • 拷贝构造函数(copy constructor)
  • 拷贝赋值操作符(copy assignment operator)
  • 析构函数(destructor)
    对于默认构造函数和析构函数来说,trivial就是什么都不做,对于拷贝构造函数和拷贝赋值来说,就是内存复制(类似于memcpy)。为了使成员函数满足上述要求,类必须具有非常简单的结构,如果满足以下三条中任一条:
  • 显式(explict)定义了这四种函数。
  • 类里有非静态非POD的数据成员。(POD,Plain Old Data,POD意思是Plain Old Data,也就是C++的内置类型或传统的C结构体类型(C风格的struct结构体定义的数据结构)。POD类型必然有以上四种函数)
  • 有基类
    则称该函数是non- trivial。对于trivial,则有对应的几点要求:
  • 它是隐式定义的(编译器合成的)
  • A没有虚函数,也没有虚基类(如果类具有虚函数,那么在创建该类的对象(初始化虚方法表等)时,它将需要一些额外的隐藏初始化,因此该类的构造函数不会被认为是trivial;如果一个类有虚基类,那么这个类的每个对象都可能包含指向同一个对象的其他部分的隐藏指针,初始化这些指针就需要额外的操作)
  • 所有A的直接基类对应函数都是trival
  • 所有非静态数据成员的类都有trivial函数

好处:判断如果一个类的函数(如析构)是trivial,就什么都不做,节省时间和内存,如果是non-trivial,就需要调用相应的函数操作

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值