Boost原子类使初始值不同于成员初始化列表
boost atomic class make initialize values different from member initialization list
我首先使用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,因此不调用构造函数。
相关文章:
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 在C++中,我如何接受不同于同一行的用户输入
- int lastIndex[NO_OF_CHARS]={-1} 如何;不同于 vector<int> lastIndex(NO_OF_CHARS, -1);?
- 为什么不允许成员函数和非成员函数之间的函数重载?
- 不同于按值传递和常量引用传递的程序集
- 将另一个类的对象传递到当前类C++的构造函数中(不是成员初始化)
- Boost 绑定和"result_type":不是成员,对 c++03 友好
- 在 C++ 的自定义运算符中删除与删除[](不同于常见的删除与删除[]问题)
- 获取 C2039:"交换":不是成员错误,如何解决?
- sizeof(enum) 可以不同于 sizeof(std::underlying_type<Enum>::
- 编译器认为我的MatrixXd构造是一个函数而不是成员
- c++ 嵌套结构映射找不到成员
- 使用 "()" 调用构造函数不同于"{}"
- 不带成员函数的类实例的默认返回
- 不从成员函数C 存储返回值认为不良习惯
- Gcc 使用 memcpy 作为隐式复制赋值运算符,而不是成员复制
- 定义不同于 constexpr 静态成员的声明
- 为数据成员分配一个新的随机方向,该方向不同于 c++ 中的当前方向
- Boost原子类使初始值不同于成员初始化列表
- 为什么成员函数指针不同于C++中的普通函数指针