我可以安全地在增强变体周围移动吗?

Can I safely memmove around a boost variant?

本文关键字:周围 移动 安全 增强 我可以      更新时间:2023-10-16

我有一个类包装了一个只包含可记忆类型(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并不差。