首页 > 解决方案 > 外部变量与静态变量的持续时间

问题描述

我从其他在线资源中了解到,static变量的释放顺序与声明它们的顺序相反(在同一文件范围内)。但是,我不知道extern变量如何发挥作用。

为简单起见,假设我们有一个头文件:

//example.h
extern shared_ptr<object> pointer;

和一个代码文件:

//example.cpp
class object { //implementation doesn't matter, just for example
};

static const object();
shared_ptr<object> pointer(object);

由于staticextern变量的持续时间在程序执行完成之前是永久的,C++ 标准是否保证首先释放一个变量?Aka,是否有保证pointer不会因为尝试释放已释放的内存而导致访问冲突?

标签: c++

解决方案


变量和对象是有区别的。Anextern使其有效地成为别名。它没有定义对象。它只为外部定义的对象提供一个您可以使用的名称。只要保留在调用堆栈上,pointerfrom就有效。example.hmain()


推荐阅读