【发布时间】:2014-02-04 05:22:52
【问题描述】:
如何使用原子变量数组编写用户定义的类/结构的复制构造函数?例如下面的代码无法编译
struct foo
{
std::array<std::atomic_int,3> a;
foo() = default;
foo(const int& i, const int& j, const int& k):a{{i,j,k}}{}
}
因为“错误:在此处声明 __atomic_base(const __atomic_base&) = delete;”即这在原子类型的定义中被删除。如果它是非原子的,它就会完成。
有没有办法做到这一点?
我已经在C++ - How to initialise an array of atomics? 进行了讨论。
【问题讨论】:
-
注意:
foo(const int& i, const int& j, const int& k)不是复制构造函数。如果您想编写该构造函数,则需要更多的大括号(这通常会有所帮助;)foo(const int& i, const int& j, const int& k):a{{{i},{j},{k}}} {}这与聚合初始化有关,它调用聚合成员的复制初始化。跨度> -
嗨@dyp,感谢您指出这一点。问题现在解决为 foo(const int& i, const int& j, const int & k){a[0].store(int(i)); a[1].store(int(j)); a[2].store(int(k));}。谢谢!
标签: arrays c++11 atomic copy-constructor initializer-list