私はしばらくの間boost::Variantを使用してきましたが、今はそれが内部的にどのように機能するかを理解しようとしています。簡単なテストを書いたのですが、結果がわかりません。これが(簡略化)です
struct my_type
{
my_type(){ cout << (size_t)this << " construction"; }
~my_type(){ cout << (size_t)this << " destruction"; }
};
int main()
{
variant<int, my_type> x;
x = my_type();
}
そのようなプログラムの出力は
140736940365327 construction <-- A
140736940365236 destruction <-- ?
140736940365327 destruction <-- A
140736940365332 destruction <-- ?
なぜデストラクタはコンストラクタほど何度も呼び出されないのですか?デストラクタがヒープを介して呼び出されるため、これはセグメンテーション違反ではない可能性があることを認識していますが、この動作は危険であるように思われます。私は何かが足りないのですか?これは、boost :: Variantの「バックアップ」メカニズムに関連していますか?