gpt4 book ai didi

c++ - boost 原子类使初始化值不同于成员初始化列表

转载 作者:太空宇宙 更新时间:2023-11-04 11:30:22 25 4
gpt4 key购买 nike

我首先使用 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;
};

当我的进程运行时,我发现一切正常。它给了我预期的值(value)。

_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 实现将使用 char 数组成员而不是 RowActiveData,因此不会调用构造函数。

关于c++ - boost 原子类使初始化值不同于成员初始化列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24983119/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com