我从其他在线资源中了解到,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);
由于static
和extern
变量的持续时间是永久性的,直到程序执行完成,C ++标准是否保证首先释放一个? Aka,是否保证pointer
不会因尝试释放已释放的内存而导致访问冲突?
答案 0 :(得分:0)
变量和对象之间存在差异。 extern
使其有效地成为别名。它没有定义一个对象。它只为外部定义的对象提供了一个可以使用的名称。只要pointer
保留在callstack上,example.h
中的main()
就会生效。