我有一个包含boost变体的类,它只包含memmovable类型(QList,QString,int等)。
我可以声明包装类可以存储到Qt容器吗?
答案 0 :(得分:2)
boost::variant
仅包含整数索引和aligned_storage
,标准保证为POD。它没有虚拟成员,但具有用户定义的构造函数和析构函数。因此,boost::variant
不是POD并试图记住它是UB(嗯,我认为它是UB,我没有在标准中找到明确的参考)。
但是,QList
,QString
等Apparently也可以这样说,Qt假设某些非POD类型可以安全地保留,并对POD进行区分(所谓的“原始类型”)和“可移动类型”。
因此,如果您认为保存QList
是安全的,那么您可以认为保存包含memmovable类型的boost::variant
是安全的。
答案 1 :(得分:1)
您可能知道,记忆非POD类型在技术上是未定义的行为。除此之外,变体不包含任何在memmoved时会出现问题的内容。既然你提到QList和QString是memmovable,我很难相信它们是POD(虽然我还没有看过它们),但boost :: variant并不差。