在这种情况下,工会成员的成员会调用自己的析构函数吗?
Will the members of a union member call their own destructors in this scenario?
带有空 dtor 的 class 是否会在联合内显式调用它自己的 dtor 时将其称为成员的 dtor?
这有点难以表达,希望伪代码更直接。在此示例中,Texture::~Texture()
会隐式调用 source.bitmap.pixels.~vector()
吗?
struct Bitmap{
~Bitmap(){} // empty dtor
// members
std::vector<uint8> pixels; // <-- will this dealloc when ~Bitmap() is called manually?
};
struct Texture{
~Texture(){
// assume sourceType is 1
switch(sourceType){
case 1:
source.bitmap.~Bitmap();
break;
}
}
// members
uint sourceType;
union Source{
Source(){}
~Source(){}
// members
Bitmap bitmap;
}source;
};
析构函数的执行定义为执行析构函数的主体,然后还执行对成员和基类的析构函数的调用。伪析构函数调用执行析构函数。
所以是的,在这种情况下,伪析构函数调用将正确销毁 pixels
。
是的,它会隐式调用所有成员的析构函数,如果你的 class 是从另一个 class 派生的,它也会调用基础 class 的析构函数。
带有空 dtor 的 class 是否会在联合内显式调用它自己的 dtor 时将其称为成员的 dtor?
这有点难以表达,希望伪代码更直接。在此示例中,Texture::~Texture()
会隐式调用 source.bitmap.pixels.~vector()
吗?
struct Bitmap{
~Bitmap(){} // empty dtor
// members
std::vector<uint8> pixels; // <-- will this dealloc when ~Bitmap() is called manually?
};
struct Texture{
~Texture(){
// assume sourceType is 1
switch(sourceType){
case 1:
source.bitmap.~Bitmap();
break;
}
}
// members
uint sourceType;
union Source{
Source(){}
~Source(){}
// members
Bitmap bitmap;
}source;
};
析构函数的执行定义为执行析构函数的主体,然后还执行对成员和基类的析构函数的调用。伪析构函数调用执行析构函数。
所以是的,在这种情况下,伪析构函数调用将正确销毁 pixels
。
是的,它会隐式调用所有成员的析构函数,如果你的 class 是从另一个 class 派生的,它也会调用基础 class 的析构函数。