如果使用std :: unique_ptr在退出作用域块时自动释放内存,为什么不只使用堆栈呢?

问题描述 投票:0回答:1

这是关于智能指针(例如唯一指针:What is a smart pointer and when should I use one?的很好的答案。

这是它们提供的最简单使用唯一指针的示例:

void f()
{
    {
       std::unique_ptr<MyObject> ptr(new MyObject());
       ptr->DoSomethingUseful();
    } // ptr goes out of scope -- 
      // the MyObject is automatically destroyed.

    // ptr->Oops(); // Compile error: "ptr" not defined
                    // since it is no longer in scope.
}

但是,这引出了一个问题:在这种情况下,目标是简单地删除对象(释放内存),唯一指针指向的对象超出范围时,为什么不将整个对象放在对象上呢?像这样堆叠???

void f()
{
    {
       MyObject() myobj;
       myobj.DoSomethingUseful();
    } // myobj goes out of scope -- 
      // and is automatically destroyed.

    // myobj.Oops(); // Compile error: "myobj" not defined
                     // since it is no longer in scope.
}

在我看来,[[only

逻辑可能是某些对象太臭了,它们可能溢出堆栈,因为堆栈似乎限制在几十KB到几MB(C/C++ maximum stack size of program),而堆可以是数百GB!有什么逻辑?在这里让我对唯一指针这个看似不必要的用例有一些了解。我想念什么?

相关:

    “要记住的栈的另一个特征是,可以存储在栈中的变量的大小受到限制(随OS的不同而不同。对于在堆上分配的变量则不是这种情况。”) (https://gribblelab.org/CBootCamp/7_Memory_Stack_vs_Heap.html

  • 这是有关智能指针(例如唯一指针)的好答案:什么是智能指针,何时应使用?这是他们提供的最简单使用唯一指针的示例:...
  • c++ stack heap smart-pointers unique-ptr
    1个回答
    0
    投票
    虽然这本身不是一个可怕的有用示例,但会稍有变化。
    © www.soinside.com 2019 - 2024. All rights reserved.