Jua*_*nto 4 c++ variant unique-ptr
我想问一下,这样的变体安全吗?
struct A
{
unique_ptr<T> anything;
};
struct B
{
int x = 0;
int y = 0;
};
variant<A, B> myVar;
myVar = ... A object;
myVar = ... B object;
myVar = ... another A object;
Run Code Online (Sandbox Code Playgroud)
std::unique_ptr所有编译器都会调用析构函数吗?这个想法是创建一个std::arrayofvariant<A, B>以在 FIFO 中使用它。它在 Visual Studio 中似乎工作正常,但我问这个问题是因为我从cppreference.com/variant读到了这篇文章,并且我不确定我是否完全理解它:
与联合一样,如果变体保存某个对象类型 T 的值,则 T 的对象表示形式将直接在变体本身的对象表示形式中分配。不允许 Variant 分配额外的(动态)内存。
您所引用的段落是标准的保证;
与联合一样,如果变体保存某个对象类型 T 的值,则 T 的对象表示形式将直接在变体本身的对象表示形式中分配。不允许 Variant 分配额外的(动态)内存。
这意味着std::variant不允许对变体持有的对象使用动态分配。这是标准的保证。
如果您有一个带有 的变体对象Foo,Foo则位于该变体的内存中,而不是在其他地方的动态分配对象中。
unique_ptr这意味着在变体中使用动态分配(即)是安全的。所有析构函数在需要调用时都会被正确调用。