当前位置: 首页 > 知识库问答 >
问题:

C++自动内存:何时释放?

邢凯歌
2023-03-14

>

  • 指向自动分配实例的指针是否可以使该实例即使在实例化的作用域被保留后也不被解除分配?
    <罢工> 在 我读到的这篇文章说所有指向去分配内存的指针都是无效的。
    但这家伙说的是手动解锁还是自动解锁后的行为?

    这是一个示例:

    int main(){
       UiTreeRecord child = UiTreeRecord::UiTreeRecord();
       createSomeScope(child);
       //Does child still have a valid parent?
       //Or does parent point to a piece of memory that has been deallocated?
    }
    
    void createSomeScope(const UiTreeRecord& child){
       UiTreeRecord root = UiTreeRecord::UiTreeRecord();
       child.attachParent(root); 
    }
    
    void UiTreeRecord::attachParent(UiTreeRecord& newParent) {
        if(parent != nullptr) {
            detachParent();
        }
        parent = &newParent;
    }
    
  • 共有1个答案

    敖淮晨
    2023-03-14

    自动记忆:什么时候解除?

    当变量超出作用域时。或者在自动成员变量的情况下,当拥有对象被销毁时。

    一个指向自动分配的实例的指针,即使在实例化的范围已经离开之后,还能阻止该实例的解分配吗?

     类似资料:
    • 了解动态内存在 C++ 中是如何工作的是成为一名合格的 C++ 程序员必不可少的。C++ 程序中的内存分为两个部分: 栈:在函数内部声明的所有变量都将占用栈内存。 堆:这是程序中未使用的内存,在程序运行时可用于动态分配内存。 很多时候,您无法提前预知需要多少内存来存储某个定义变量中的特定信息,所需内存的大小需要在运行时才能确定。 在 C++ 中,您可以使用特殊的运算符为给定类型的变量在运行时分配堆

    • 本文向大家介绍c# 从内存中释放Selenium chromedriver.exe,包括了c# 从内存中释放Selenium chromedriver.exe的使用技巧和注意事项,需要的朋友参考一下 背景 我设置了一个c#代码来运行Selenium chromedriver.exe.在运行结束时,我有browser.close()来关闭实例。(browser = webdriver.Chrome(

    • 我在C#上度过了一段糟糕的时光,在我不再引用它之后,没有为我保存在内存中的大型结构释放内存。 我在下面包含了一些代码,它们显示了与我遇到的问题类似的问题。我想我一定是误解了GC,因为我不确定为什么下面的代码会抛出内存不足异常。 有人知道为什么我包含的代码会丢失内存吗?没有一份名单被保留,可以立即清理。 谢谢, 保罗 复制:全新的4.5控制台应用程序,将代码粘贴到Main中。 异常将在for循环的第

    • 本文向大家介绍c++创建二维动态数组与内存释放问题,包括了c++创建二维动态数组与内存释放问题的使用技巧和注意事项,需要的朋友参考一下 如下: 如上,结果如下: create dynamic two-dimension array... 01234567 12345678 23456789 345678910 4567891011 Press any key to continue . . . 总

    • 本文向大家介绍C#如何快速释放内存的大数组详解,包括了C#如何快速释放内存的大数组详解的使用技巧和注意事项,需要的朋友参考一下 前言 本文告诉大家如何使用 Marshal 做出可以快速释放内存的大数组。最近在做 3D ,需要不断申请一段大内存数组,然后就释放他,但是 C# 对于大内存不是立刻释放,所以就存在一定的性能问题。在博客园看到了一位大神使用 Marshal 做出快速申请的大数组,于是我就学

    • 问题内容: 有没有一种类似于函数的释放Java内存的方法?还是将对象设置为null并依靠GC是唯一的选择? 问题答案: Java使用托管内存,因此分配内存的唯一方法是使用运算符,而释放内存的唯一方法是依靠垃圾回收器。 该内存管理白皮书(PDF)可能有助于解释发生了什么。 你还可以致电建议垃圾收集器立即运行。但是,Java Runtime做出最终决定,而不是你的代码。 根据Java文档, 调用gc方