C++ 在编译时检查销毁顺序约束

C++ 在编译时检查销毁顺序约束,c++,destruction,C++,Destruction,有没有办法在编译时检查“a在B之前被销毁”形式的销毁顺序约束?我认为这是不可能的。以以下代码为例: int main(int argc, char **argv){ Object A = new Object(), B = new Object(); if(argc == 1){ delete A; delete B; }else { delete B; delete A; } } 在编译时,您如何知道首先调用哪个析构函数?您可以通过向析构函

有没有办法在编译时检查“a在B之前被销毁”形式的销毁顺序约束?

我认为这是不可能的。以以下代码为例:

int main(int argc, char **argv){
  Object A = new Object(), B = new Object();
  if(argc == 1){
    delete A;
    delete B;
  }else
  {
    delete B;
    delete A;
  }
}

在编译时,您如何知道首先调用哪个析构函数?

您可以通过向析构函数添加命令来轻松检查这一点。请参阅(此处示例了解更多详细说明):

亲切问候,,
Bo

它对于自动变量是固定的,对于动态分配的对象不能固定。另外,如果您的问题是针对类的成员对象,那么是的,它是固定的。在类声明中首先列出的成员将首先被销毁。

(部分)是“自动对象”。对动态物体说“不”,哎呀,真丢脸。谢谢@SteveJessop,修复了。这不是在编译时,而是在运行时。