首页 > 解决方案 > 在这种情况下,工会成员的成员会调用自己的析构函数吗?

问题描述

具有空 dtor 的类是否会在从联合中显式调用它自己的 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;
};

标签: c++destructorunions

解决方案


析构函数的执行被定义为执行析构函数的主体,然后还执行对成员和基的析构函数的调用。伪析构函数调用执行析构函数。

pixels所以是的,在这种情况下 ,伪析构函数调用将正确销毁。


推荐阅读