c++ - 全局标量变量(指针)的生命周期
问题描述
// 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
当程序开始终止时,编译器释放其存储空间时取消引用!)
编辑: 的类型num
是int*
. 所以我认为它永远不会被破坏。所以没有指定调用析构函数的顺序在这里不是问题。有两个/三个问题,我想知道其中是否有可能:
- 更改指向的内存块
&num
。所以*num
会变得不确定。 - 指向的内存块
num
被释放,因此*num
将变得未定义。 - 的内容
*num
会改变,所以*num
定义但具有不同的值。
解决方案
推荐阅读
- udeploy - 有什么方法可以在 UrbanCode uDeploy 中使用 CLI 或 REST api 获取应用程序进程中的版本
- android - querySkuDetailsAsync 查询的数据库在哪里?
- node.js - 我无法登录到我的数据库 mssql 节点 js + docker
- python-3.x - 由于 windows10 上的 ssl 验证,为 Python3.8 安装 boto3 失败
- python - docker build 中的 node-gyp 错误,如何在 docker 化我的 testcafe 项目时在 dockerfile 中安装 Python?
- java - 刚开始学习的 Java 子字符串
- amazon-web-services - 在 AWS lambda“编辑运行时设置”中获取“拒绝访问”
- triggers - 在其他 sql server 数据库中触发 Oracle 更新字段
- javascript - 如何向通过路由器加载的 Vue2 组件的 HTML 添加引用?
- javascript - 如何在 discord.js 中获取您在消息中 ping 的人的用户名