[英]std::vector of class containing atomic
我正在尝试创建一个包含类实例的向量,该类继而包含(除其他外)std :: atomic。
我尝试了几种:
如果指定了副本构造函数,我将尝试两件事:
与foo(foo&other)一起,它将抱怨找不到foo的副本构造函数。
编辑:副本构造函数是foo(foo&other):atomic(other.atomic.load()){}
与foo(const foo&other)一起使用时,它将抱怨std :: atomic没有const复制构造函数。
编辑:副本构造函数是foo(const foo&other):atomic(other.atomic.load()){}
我完全不知道如何解决此问题,因此非常感谢您的帮助
根据设计, std::atomic
既不可复制也不可移动。 导致std::vector
重新分配的操作要求其元素至少是可移动的。 因此,您有以下选择:
std::atomic
。 也许可以使用std::unique_ptr<std::atomic>
代替。 std::unique_ptr<ElementClass>
(如@Richard Critten在评论中所建议)。 std::atomic
的不可移动性。 给您的类虚拟复制/移动操作,以使编译器满意。 然后,使用reserve
预先在vector中分配空间,然后仅使用附加元素(最大为预先分配的大小),访问它们或从末尾删除的函数; 没有中间插入或删除。 这样,虚拟操作将不会真正被调用。
考虑到这种方法的脆弱性,我建议采取两种预防措施:
std::vector
,而是将其包装在具有适当限制的接口的自己的NonResizableVector<T>
,并对其进行大量记录。 您应该(甚至可以使用)其中哪一个取决于您的类实际执行的操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.