当我阅读seastar source code时,我注意到有一个名为 tx_side 的 union 结构,它只有一个成员。这是处理某个问题的一些技巧吗?
仅供引用,我将 tx_side
结构粘贴到下面:
union tx_side {
tx_side() {}
~tx_side() {}
void init() { new (&a) aa; }
struct aa {
std::deque<work_item*> pending_fifo;
} a;
} _tx;
最佳答案
因为tx_side
是一个联盟,tx_side()
不会自动初始化/构造a
,和~tx_side()
不会自动破坏它。
这允许对 a
的生命周期进行细粒度控制。和pending_fifo
,通过 Placement-new 和手动析构函数调用(穷人的 std::optional
)。
这是一个例子:
#include <iostream>
struct A
{
A() {std::cout << "A()\n";}
~A() {std::cout << "~A()\n";}
};
union B
{
A a;
B() {}
~B() {}
};
int main()
{
B b;
}
在这里,B b;
不打印任何内容,因为 a
既不被构造也不被破坏。
如果B
是 struct
, B()
会打电话 A()
,和~B()
会打电话 ~A()
,并且您无法阻止这种情况。
关于c++ - 使用只有一名成员的 union 的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59066929/