C++;具有静态存储持续时间的对象级联销毁 Link表示,在静态存储期间,对象的级联破坏是C++中流行的未定义行为。到底是什么?我不明白。如果用一个简单的C++程序来解释,它会更好。非常感谢你的帮助。谢谢static_destruction.h

C++;具有静态存储持续时间的对象级联销毁 Link表示,在静态存储期间,对象的级联破坏是C++中流行的未定义行为。到底是什么?我不明白。如果用一个简单的C++程序来解释,它会更好。非常感谢你的帮助。谢谢static_destruction.h,c++,destructor,undefined-behavior,object-destruction,C++,Destructor,Undefined Behavior,Object Destruction,及 我相信,这就是我们生活中未定义的行为的含义 具有静态存储持续时间的对象级联销毁 很难提供一个演示未定义行为的程序,因为。。。未定义。@FrançoisMoisan:so上的问题太多,显示UB的源代码也不难。@FrançoisMoisan我相信OP想要的是“静态存储持续时间的对象级联破坏”的示例/解释,而不是未定义行为的示例。“这远不是很明显的意思。”@Jarod42。很公平。我的观点是,很难证明代码的行为是什么。如果你不能从这样的代码中得到任何结果,我不确定你能学到什么。 #include

我相信,这就是我们生活中未定义的行为的含义

具有静态存储持续时间的对象级联销毁


很难提供一个演示未定义行为的程序,因为。。。未定义。@FrançoisMoisan:so上的问题太多,显示UB的源代码也不难。@FrançoisMoisan我相信OP想要的是“静态存储持续时间的对象级联破坏”的示例/解释,而不是未定义行为的示例。“这远不是很明显的意思。”@Jarod42。很公平。我的观点是,很难证明代码的行为是什么。如果你不能从这样的代码中得到任何结果,我不确定你能学到什么。
#include <vector>

class   first
{
public:
  static std::vector<int> data;

public:
  first();
  ~first();
};

class   second
{
public:
  static std::vector<int> data;

public:
  second();
  ~second();
};

class   container
{
public:
  static first  f;
  static second s;
};
#include <iostream>
#include "static_destruction.h"

first::first()
{
  data = {1, 2, 3, 4};
}

first::~first()
{
  std::cout << second::data.size() << std::endl;
}

std::vector<int>        first::data;

second   container::s;

int     main(void)
{
}
#include <iostream>
#include "static_destruction.h"

second::second()
{
  data = {1, 2, 3, 4, 5, 6};
}

second::~second()
{
  std::cout << first::data.size() << std::endl;
}

std::vector<int> second::data;

first   container::f;
$> g++ -std=c++11 static_destruction.cpp static_destruction2.cpp
$> ./a.out
0
4
$> g++ -std=c++11 static_destruction2.cpp static_destruction.cpp
$> ./a.out
0
6