c – 依赖初始化顺序

前端之家收集整理的这篇文章主要介绍了c – 依赖初始化顺序前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
根据C 14标准,非静态成员变量按照它们在类中声明的顺序进行初始化.下面的减少代码依赖于此规则来控制线程函数.
class foo
{
     foo(): 
          keep_going{true},my_thread(&foo::go,this)
     {}

      void go()
      {
          while(keep_going)
             check a std::condition_variable and do some work;
      }
      bool keep_going;
      std::thread my_thread;
}

请注意,keep_going在线程对象之前声明,并且应该在线程进入go函数时设置为true.这很好,似乎工作正常.

但是,这是多线程代码,并且偏执是值得的,所以我有两个问题:

1依赖这样的初始化顺序是否安全?没有处理线程,我的真实对象没有意义,所以我想在构造函数中设置它.

2当代码依赖于初始化顺序等相对模糊的东西时,给别人提供代码是不安全的吗?

解决方法

>按标准是安全的.
>非常不安全.很少有人知道这一点,维护你的头文件的人可能会给成员重新排序带来灾难性的后果.

我不会依赖它.

猜你在找的C&C++相关文章