繁体   English   中英

带有unique_ptr的C ++堆栈

[英]C++ stack with unique_ptr

我有一个遗留程序,它使用std :: stack对象来存储一些指针。

std::stack<Widget*> widgetStack;

现在我想将其更改为新的C ++ 11样式

std::stack<std::unique_ptr<Widget>> widgetStack;

但是在代码中有一个函数:

Widget* getLastWidget()
{
    if(!widgetStack.isEmpty())
    {
        return widgetStack.top();
    }
    return null;
}

我很想让这个函数与unique_ptr一起工作。 堆栈是小部件的所有者,只有在弹出堆栈时,才应销毁Widget对象。 关于如何解决这个问题的任何想法?

如果堆栈是指针的唯一所有者,则建议返回原始指针,因为原始指针意味着“没有所有权的指针”:

Widget* getLastWidget()
{
    if(!widgetStack.isEmpty())
    {
        return widgetStack.top().get();
    }
    return nullptr;
}

我个人不喜欢使用原始指针。 你可以简单地将std::unique_ptr更改为std::shared_ptr ,如@ user202729所示

std::stack<std::shared_ptr<Widget>> widgetStack;

std::shared_ptr<Widget> getLastWidget()
{
    if(!widgetStack.isEmpty())
    {
        return widgetStack.top();
    }
    return nullptr;
}

这样,指针仍由堆栈管理,您不必以原始形式处理它们。

我在评论中提出了参考,但这不是太好的解决方案。 返回引用使得很难返回空栈的指示(如示例中的nullptr )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM