将带有空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;
};
定义析构函数的执行以执行析构函数的主体,然后还执行对成员和base的析构函数的调用。伪析构函数调用执行析构函数。
所以是的,在这种情况下,伪析构函数调用将正确销毁pixels
。
是的,它将隐式调用所有成员的析构函数,如果您的类是从另一个类派生的,它也将调用基类的析构函数。