Object 如何避免返回临时对象(C+;+;)

Object 如何避免返回临时对象(C+;+;),object,memory-management,return,temporary,Object,Memory Management,Return,Temporary,下面的代码显示了内存管理的一个糟糕示例;决不会取消分配项,因为会返回该项的临时副本 我已经断断续续地搜索编程论坛好几个星期了,但对于如何在允许取消分配项目的同时正确返回Item*类型的有效实例,还没有找到一个明确的解释。 换句话说,除了此代码之外,还有什么更好的替代方法可以实现相同的返回值,同时允许取消分配项 Item* Inventory::add(const string& name) { Item* item = new Item(name); ...(some

下面的代码显示了内存管理的一个糟糕示例;决不会取消分配项,因为会返回该项的临时副本

我已经断断续续地搜索编程论坛好几个星期了,但对于如何在允许取消分配项目的同时正确返回Item*类型的有效实例,还没有找到一个明确的解释。 换句话说,除了此代码之外,还有什么更好的替代方法可以实现相同的返回值,同时允许取消分配项

Item* Inventory::add(const string& name)
{ 
    Item* item = new Item(name);
    ...(some other code here)...
    return item;
}

谢谢

您可能会认为,一旦跳出循环,所有内容都将被销毁,但返回的指针(以及它指向的内存)将保留下来。它被传输到调用此方法的对象,并且没有内存泄漏。

关于
std::unique\u ptr
?我不明白这是一个问题。您已将指向项的指针的唯一副本返回给客户端,现在客户端的任务是取消分配它。请在合同/文件/评论中明确说明这一事实。谢谢。请允许我添加一件事:我不拥有代码的客户端部分,因此无法从那里取消分配项。是否有其他方法可以避免内存泄漏?这实际上取决于代码部分的范围和可见性。在我看到的一个生产代码示例中,有许多“管理器”类由一个全局主管理器类处理。用户必须创建指向主管理器类的指针。然后,当用户需要一个“manager”类时,他们可以像往常一样调用
new
来获取指针,但他们不应该自己取消分配这些指针;它们只需调用主管理器指针的
delete
,它将依次取消分配所有现有的管理器类。