我正在尝试学习std::variant
。在这个例子中,我不理解为什么我不想初始化ab
,而是使用std::monostate
,类A
只被构造一次,但却被析构两次。发生了什么?
#include <iostream>
#include <variant>
struct A
{
A() { std::cout << "Constructing A\n"; }
~A() { std::cout << "Destructing A\n"; }
};
struct B
{
B() { std::cout << "Constructing B\n"; }
~B() { std::cout << "Destructing B\n"; }
};
int main()
{
std::variant<std::monostate, A, B> ab;
ab = A();
}
运行这个例子会产生以下输出。
Constructing A
Destructing A
Destructing A
ab = A()
构造了一个 A 对象,然后将其移动到变量中。你想要的是ab.emplace<A>()
。 - Homer512