假设我有这样的函数:
MyClass &MyFunction(void) { static MyClass *ptr = 0; if (ptr == 0) ptr = new MyClass; return MyClass; }
问题是在程序退出时间,ptr变量是否会变为无效(即该ptr的内容是否被现有流程清理)?我意识到这个函数泄漏了,但它只是一个简单的例子.
同样的问题也适用于除指针之外的其他原语.如果我有一个静态整数怎么样,该整数的值是否始终在退出时保持不变或由于静态销毁订单问题而变化?
编辑:
为了澄清,我想知道静态指针(或任何其他基本类型,如int或float)的内容实际发生了什么,而不是它指向的内存.例如,假设ptr指向某些内存地址,我想在其他静态类的析构函数中检查它.我可以依赖ptr内容不会改变的事实(即在静态破坏过程中指针值不会被清除)吗?
谢谢,乔
当您处理退出时,操作系统将释放分配给它的所有内存页(其他人可能使用的模数共享内存页).
但是,正如其他人指出的那样,MyClass的析构函数从未被调用过.ptr指出的价值也没有改变.如果你有一个值为123的静态int,那么它的值将保持123到过程'生命周期的最后.