我可以安全地记住增强型变体吗?

时间:2012-06-06 09:21:26

标签: c++ qt boost

我有一个包含boost变体的类,它只包含memmovable类型(QList,QString,int等)。

我可以声明包装类可以存储到Qt容器吗?

2 个答案:

答案 0 :(得分:2)

boost::variant仅包含整数索引和aligned_storage,标准保证为POD。它没有虚拟成员,但具有用户定义的构造函数和析构函数。因此,boost::variant不是POD并试图记住它是UB(嗯,我认为它是UB,我没有在标准中找到明确的参考)。

但是,QListQStringApparently也可以这样说,Qt假设某些非POD类型可以安全地保留,并对POD进行区分(所谓的“原始类型”)和“可移动类型”。

因此,如果您认为保存QList是安全的,那么您可以认为保存包含memmovable类型的boost::variant是安全的。

答案 1 :(得分:1)

您可能知道,记忆非POD类型在技术上是未定义的行为。除此之外,变体不包含任何在memmoved时会出现问题的内容。既然你提到QList和QString是memmovable,我很难相信它们是POD(虽然我还没有看过它们),但boost :: variant并不差。