【问题标题】:Return Local Object in a function在函数中返回本地对象
【发布时间】:2015-07-26 00:16:23
【问题描述】:

我已经完成了以下代码:

Xyz CV::Init(Source& node)
{

    if (node == 5)
    {
        Xyz nodeRelay(node.getNodeQ());
        nodeRelay.setInputNode(node);
        return nodeRelay;
    }
}

我是这样使用的:

Xyz xyz = Init(center);

当我尝试编译时,我得到了错误:

error: use of deleted function

我正在使用 C++11 和 GCC 4.9.0

XyZ 是这样的:

Xyz::Xyz( uint8_t type ):
BaseNode(),
m_type(type)
{

}

错误在一行:

return nodeRelay;

如果我把它拿走,那么它就会编译。

【问题讨论】:

  • Xyz 的声明是怎样的?
  • 这不是我一直要求的类声明。
  • 听起来Xyz 是不可复制的,所以你不能返回它的副本。阅读整个错误消息以找出原因。或发帖enough information 让我们解决,如果您自己无法解决。
  • @user1876942 如果节点不是5,你会返回什么?

标签: c++


【解决方案1】:

从函数返回本地对象很好。只有当 node = 5 时才返回 Xyz 对象,如果 node 不等于 5 怎么办。你应该返回一些有效的 Xyz 对象。

【讨论】:

  • 显然在这种情况下不好,因为它会导致编译错误。一般来说,如果对象有一个可访问的副本或移动构造函数就可以了。
  • 当它不是 5 时,我想我会抛出一个异常。我没有发布所有代码。 Mike Seymour 是对的,我正在阅读有关复制构造函数的内容。
猜你喜欢
  • 2011-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-21
  • 1970-01-01
  • 1970-01-01
  • 2021-08-18
  • 2016-03-17
相关资源
最近更新 更多