c – 何时释放与静态变量相关的内存?
发布时间:2020-12-16 05:05:44 所属栏目:百科 来源:网络整理
导读:参见英文答案 Destruction order of static objects in C++9个 我想知道是否有人可以对c中的内存释放过程有所了解. 如果我有一个我声明为静态的结构,那么它的构造函数是第一个执行的东西,它的析构函数是最后执行的东西: struct initializer execute_before_
参见英文答案 >
Destruction order of static objects in C++9个
我想知道是否有人可以对c中的内存释放过程有所了解. 如果我有一个我声明为静态的结构,那么它的构造函数是第一个执行的东西,它的析构函数是最后执行的东西: struct initializer execute_before_and_after_main { initializer() { init(); } ~initializer() { cleanup(); } } static initializer execute_around_main; 然后我有类似的东西: class my_class { my_object objects[100]; } extern my_class gobal_my_class; my_class global_my_class; 主要在这里并不重要: int main (int argc,char* argv[]) { .... } 当调用cleanup()时,对象数组现在是否包含解除分配/无效的内存?是否有一个标准的初始化/破坏序列,c在这里实现,有人可能指向我? 谢谢 编辑:我理解这种类型的代码可能不是最佳实践,但我仍然想知道行为是否已定义. 解决方法
静态和全局变量都有
static storage duration意味着它们在程序结束时被释放.通过读取其中一个副本,我发现如果代码全部在同一个翻译单元(您的)中,那么具有静态存储的对象将按照与构造相反的顺序进行破坏.如果对象位于不同的翻译单元中,则无法保证任何内容.
是的,但这并不重要,因为只有在对象超出范围时才会调用它
是的,全局我的类首先被破坏,因为它最后被初始化 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |