关于构造函数调用次数

关于构造函数调用次数

静态构造函数到底执行了多少次?

-----------------

  1. 关于构造函数调用次数

对于class和struct都可以定义构造函数,而构造函数又有实例构造函数和静态构造函数。

1.1. 实例构造函数在每次实例化时,都会执行一次。(调用 N次,则执行 N次;甚至更多,如数组,详见“c++定义类的对象”)

1.2. 那静态构造函数是否如此呢?(不论实例化多少次,静态构造函数在程序域的层级,都仅仅会执行1次

得出结论:静态构造函数只执行一次。

那有人会问,如果并发呢?

并发也依然会执行一次。因为在调用静态构造函数时,会先检测有没有被初始化(即有没有被调用过)。如果有,则直接跳过。如果没有,将进入静态构造函数内部。

1.3. 总结:只有涉及到内存分配的时候,才会调用构造函数。

普通对象调用一次,对象数组调用N次(该数组含有N个元素)。只定义指针而不给指针赋值,则不涉及内存分配,不调用构造函数。

==========

2. c++定义类的对象:

MyClass a,b[2],*c,**d,*e[2],*f=new char A,*g=new char B[2]分别调用几次构造函数?为什么?

MyClass a:定义一个对象,调用1次构造函数。

b[2]:定义含有两个元素的数组,实际上定义两个对象,所以调用2次构造函数。

*c:定义指向类对象的指针,但没有进行实际的内存分配,所以不调用构造函数。

**d:定义指向类对象指针的指针,但没有进行实际的内存分配,所以不调用构造函数。

*e[2]:定义含有两个指向类对象的指针的数组,但没有进行实际的内存分配,所以不调用构造函数。

*f=new char A:这个语句有问题,f是指向MyClass的对象,你却让它指向char类型的变量。应该改成:*f=new MyClass,涉及到内存的分配,调用1次构造函数。

*g=new MyClass [2],涉及到内存的分配,调用2次构造函数。

总结:只有涉及到内存分配的时候,才会调用构造函数普通对象调用一次,对象数组调用N次(该数组含有N个元素)只定义指针而不给指针赋值,则不涉及内存分配,不调用构造函数

————————————————

原文链接:https://blog.csdn.net/WUYUAN2011WOAINI/article/details/8138185

3. 静态构造函数到底执行了多少次?

结论:静态构造函数在程序域的层级确保了只会执行一次,且是线程安全的。所以非常适合于用在单件模式中(或者只需要单一对象的地方)。

转载请注明出处:http://blog.csdn.net/xxdddail/article/details/38058121

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值