我可以安全地在增强变体周围移动吗?
Can I safely memmove around a boost variant?
我有一个类包装了一个只包含可记忆类型(QList,QString,int等)的boost变体。
我可以声明包装类可与Qt容器交互吗?
一个boost::variant
只包含一个整数索引和一个aligned_storage
,这是标准保证的POD。它没有虚拟成员,但具有用户定义的构造函数和析构函数。因此,boost::variant
不是 POD,并且试图移动它是 UB(好吧,我认为它是 UB,我在标准中找不到明确的参考)。
QString
QList
显然,Qt假设一些非POD类型可以安全地内存,并区分POD(所谓的"基元类型")和"可移动类型"。
因此,如果您认为对QList
进行内存移动是安全的,则可以认为对包含可移动类型的boost::variant
进行内存移动是安全的。
您可能
知道内存移动非 POD 类型在技术上是未定义的行为。除此之外,变体不包含任何如果内存移动会有问题的东西。既然你提到QList和QString是可记忆的,而且我很难相信它们是POD(尽管我没有见过它们),boost::varie并不差。
相关文章:
- 将对象移动到std::shared_ptr
- 何时在引用或唯一指针上使用移动语义
- 如何从具有移动语义的类对象中生成共享指针
- 将shared_ptr移动到<StructA>shared_ptr<变体<结构A、结构 B>>
- C / C++ 移位/偏移/向左或向右移动位图?
- MSVC将仅移动结构参数解释为指针
- 自定义先决条件对移动分配运算符有效吗
- 返回值优化:显式移动还是隐式
- 当有分配器意识的容器被复制/移动时,反弹分配器是否被复制/移走
- 为什么复制而不是移动数据元素?
- 可以使用移动语义更改或改进此C++代码吗?
- 使lambda不可复制/不可移动
- c++在使用指针时移动语义
- 将QGraphicsItem的移动区域限制在多边形区域内
- SendInput()鼠标移动计算
- 在椭圆周围移动球体
- 我可以安全地在增强变体周围移动吗?
- 如何在OpenGL中使用鼠标在相机周围移动
- 如何保持一个绘制矩形在相同的地方,因为相机周围移动
- OpenGL在相机周围移动场景