当前位置:  开发笔记 > 编程语言 > 正文

C++:程序退出时静态原语是否无效?

如何解决《C++:程序退出时静态原语是否无效?》经验,为你挑选了1个好方法。

假设我有这样的函数:

MyClass &MyFunction(void)
{
  static MyClass *ptr = 0;
  if (ptr == 0)
    ptr = new MyClass;
  return MyClass;
}

问题是在程序退出时间,ptr变量是否会变为无效(即该ptr的内容是否被现有流程清理)?我意识到这个函数泄漏了,但它只是一个简单的例子.

同样的问题也适用于除指针之外的其他原语.如果我有一个静态整数怎么样,该整数的值是否始终在退出时保持不变或由于静态销毁订单问题而变化?

编辑:

为了澄清,我想知道静态指针(或任何其他基本类型,如int或float)的内容实际发生了什么,而不是它指向的内存.例如,假设ptr指向某些内存地址,我想在其他静态类的析构函数中检查它.我可以依赖ptr内容不会改变的事实(即在静态破坏过程中指针值不会被清除)吗?

谢谢,乔



1> Rob Walker..:

当您处理退出时,操作系统将释放分配给它的所有内存页(其他人可能使用的模数共享内存页).

但是,正如其他人指出的那样,MyClass的析构函数从未被调用过.ptr指出的价值也没有改变.如果你有一个值为123的静态int,那么它的值将保持123到过程'生命周期的最后.

推荐阅读
yzh148448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有