首页 > 解决方案 > 全局标量变量(指针)的生命周期

问题描述

// Complete Header File (myheader.hpp)
#pragma once
void fun();

// Complete Cpp File
// I don't think removing `static` from the following line changes storage duration nor lifefime
#include "myheader.hpp"
#include <iostream>
static auto num = new int(10);
void fun() { std::cout << *num; }

想象一下,许多其他文件包括myheader.hpp并调用fun. 特别是在静态全局变量的析构函数内部。这会导致未定义的行为吗?(即,num当程序开始终止时,编译器释放其存储空间时取消引用!)

编辑: 的类型numint*. 所以我认为它永远不会被破坏。所以没有指定调用析构函数的顺序在这里不是问题。有两个/三个问题,我想知道其中是否有可能:

  1. 更改指向的内存块&num。所以*num会变得不确定。
  2. 指向的内存块num被释放,因此*num将变得未定义。
  3. 的内容*num会改变,所以*num定义但具有不同的值。

标签: c++object-lifetime

解决方案


推荐阅读