+ -
当前位置:首页 → 问答吧 → 多线程调用,new对象问题

多线程调用,new对象问题

时间:2010-07-22

来源:互联网

本帖最后由 alazer 于 2010-07-22 09:20 编辑

1. C++在new一个类对象时,会调用该类的构造函数,那么该类中的变量初始化顺序是什么??
    比如,一个类有3个变量1,2,3,而构造函数中只有对1有初始化操作,那么变量2,变量3的隐含初始化时在什么时候,是在1初始化之后初始化的还是之前? (假设变量2、变量3即为另外一个类的变量,不是普通的int等)
  1. class ClassA
  2. {
  3.      ClassA();
  4.       OtherClass    obj_1;
  5.       OtherClass    obj_2;
  6.       OtherClass    obj_3;
  7. };

  8. ClassA::ClassA
  9. {
  10.         obj_1 = .....;
  11. }
复制代码
2. 线程1中,存在 pObj = new ClassA; 而ClassA中构造函数中会稍微耗时.
    线程2中,存在对pObj调用.
   我想问一下, 当线程1正处于 new ClassA中,在ClassA的构造函数中,此时线程切换至线程2, pObj进行调用其中某个对象,这时候会不会core dump???

作者: alazer   发布时间: 2010-07-22

1. 是在1之后。
2. 会coredump,所以需要保证pObj已经初始化完毕

作者: rain_fish   发布时间: 2010-07-22

谢谢楼上.
对象初始化的顺序部分,有什么参考书啊..我找了一下普通的书,没找到

作者: alazer   发布时间: 2010-07-22

刚才对问题2试了一下
当线程1正处于 new ClassA中,在ClassA的构造函数中,此时线程切换至线程2, pObj此时为空的.这挺出乎我意料

作者: alazer   发布时间: 2010-07-22

多线程调用同一对象,一般都得加锁

作者: hellioncu   发布时间: 2010-07-22



QUOTE:
刚才对问题2试了一下
当线程1正处于 new ClassA中,在ClassA的构造函数中,此时线程切换至线程2, pObj此时为 ...
alazer 发表于 2010-07-22 09:34



在构造函数中,说明该类还没有构造完毕,也就没有赋值给pObj,所以pObj为空。。。

作者: rain_fish   发布时间: 2010-07-22



QUOTE:
谢谢楼上.
对象初始化的顺序部分,有什么参考书啊..我找了一下普通的书,没找到
alazer 发表于 2010-07-22 09:29




    google 初始化列表 类
就能找到相应的文章。。

作者: rain_fish   发布时间: 2010-07-22