有没有办法在类析构函数之前调用字段析构函数?
假设我有两个类Small和Big,Big包含Small的实例作为其字段,如下所示:
当然,在调用小的析构函数之前,会先调用大的析构函数:
我需要在Big析构函数之前调用Small析构函数,因为它执行了一些对于Big析构函数来说必要的清理工作。
我可以采用以下方法:
1.显式调用small.~Small()析构函数。但是这会导致Small析构函数被调用两次:一次显式调用,一次在Big析构函数执行后自动调用。
2.将一个Small*类型的指针作为字段,在Big析构函数中调用delete small;。
我知道我也可以在Small类中定义一个函数来进行清理,并在Big析构函数中调用它,但我想知道是否有一种方式来颠倒析构函数的顺序。
有更好的方法吗?
假设我有两个类Small和Big,Big包含Small的实例作为其字段,如下所示:
class Small
{
public:
~Small() {std::cout << "Small destructor" << std::endl;}
};
class Big
{
public:
~Big() {std::cout << "Big destructor" << std::endl;}
private:
Small small;
};
int main()
{
Big big;
}
当然,在调用小的析构函数之前,会先调用大的析构函数:
Big destructor
Small destructor
我需要在Big析构函数之前调用Small析构函数,因为它执行了一些对于Big析构函数来说必要的清理工作。
我可以采用以下方法:
1.显式调用small.~Small()析构函数。但是这会导致Small析构函数被调用两次:一次显式调用,一次在Big析构函数执行后自动调用。
2.将一个Small*类型的指针作为字段,在Big析构函数中调用delete small;。
我知道我也可以在Small类中定义一个函数来进行清理,并在Big析构函数中调用它,但我想知道是否有一种方式来颠倒析构函数的顺序。
有更好的方法吗?