2012-06-06 31 views

回答

1

您可能知道,非POD類型的移動是技術上未定義的行爲。除此之外,變體不包含任何如果移除會造成問題的東西。既然你提到QList和QString是可變的,並且我很難相信它們是POD(儘管我沒有看到它們),但boost :: variant並沒有變得更糟。

2

A boost::variant只包含一個積分索引和一個aligned_storage,它由標準保證是一個POD。它沒有虛擬成員,但具有用戶定義的構造函數和析構函數。因此,boost::variant不是一個POD,並試圖把它看作UB(好吧,我認爲它是UB,我沒有在標準中找到明確的參考)。

然而,同樣可以針對QListQStringApparently,Qt的假定一些非POD類型可以安全地memmoved,並使POD之間的區別(所謂的「原始類型」)和所述「活動類型「。因此,如果您認爲可以安全地移除QList,那麼您可以考慮安全地移除含有可移動類型的boost::variant

+0

+1爲鏈接到容器內部! – leemes

相關問題