这是关于智能指针(例如唯一指针: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.
}
但是,这引出了一个问题:在这种情况下,目标是简单地删除对象(释放内存),唯一指针指向的对象超出范围时,为什么不将整个对象放在对象上呢?像这样堆叠???
逻辑可能是某些对象太臭了,它们可能溢出堆栈,因为堆栈似乎限制在几十KB到几MB(C/C++ maximum stack size of program),而堆可以是数百GB!有什么逻辑?在这里让我对唯一指针这个看似不必要的用例有一些了解。我想念什么?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
相关: