Boost原子类使初始值不同于成员初始化列表

boost atomic class make initialize values different from member initialization list

本文关键字:不同于 成员 初始化 列表 子类 Boost      更新时间:2023-10-16

我首先使用boost::atomic类,有一个初始化问题。

我有一个RowActiveData结构

struct RowActiveData {
    RowActiveData() : _rowActive(0), _rowActiveFile(0), _rowActiveTrack(1)
    {}
    size_t    _rowActive;
    size_t    _rowActiveFile;
    size_t    _rowActiveTrack;
};

和有RowActive结构使用它。

struct IRowActive {
    virtual void setRowActive(size_t row) = 0;
};
struct RowActive : public IRowActive {
    RowActive() {}
    virtual void setRowActive(size_t row)
    {
        RowActiveData tmpData;
        tmpData._rowActive = row;
        tmpData._rowActiveFile = row * 2;
        tmpData._rowActiveTrack = row * 3;
    }
//    boost::atomic
//        <RowActiveData>      _data;
    RowActiveData            _data;
};

当我的进程运行时,我看到一切正常。它给出了我所期望的值。

_rowActiveFile is 0 and _rowActiveTrack is 1. 

但是当我注释掉

// RowActiveData _data;

和删除原子注释

boost::atomic <RowActiveData> _data;

给我的是垃圾值。

怎么了?

根据boost文档,空构造函数初始化为一个未指定的值。试着

boost::atomic<RowActiveData> _data(RowActiveData());

Boost文档在http://www.boost.org/doc/libs/1_54_0/doc/html/atomic/interface.html

另外,我已经检查过了,在我看来,至少在http://www.chaoticmind.net/~hcb/projects/boost.atomic/中的boost实现将使用字符数组成员而不是RowActiveData,因此不调用构造函数。