在这种情况下,工会会员的成员会叫自己的析构函数吗?

问题描述 投票:0回答:2

将带有空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++ union destructor
2个回答
1
投票

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

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


1
投票

是的,它将隐式调用所有成员的析构函数,如果您的类是从另一个类派生的,它也将调用基类的析构函数。

© www.soinside.com 2019 - 2024. All rights reserved.