2015-05-14 37 views
-8

我也做了下面的代码:返回局部对象在函数

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

Xy Z是这样的:

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

} 

的错误是在该行:

return nodeRelay; 

如果我身上拿走然后再编译。

+2

“Xyz”的声明是怎么样的? –

+0

我添加了该信息。 – user1876942

+0

这不是我所要求的类声明。 –

回答

0

从函数返回本地对象是好的。只有在节点= 5时返回Xyz对象,如果节点不等于5,该怎么办。您应该返回一些Xyz的有效对象。

+0

显然,在这种情况下它不好,因为它会导致编译错误。一般来说,如果对象具有可访问的副本或移动构造函数,那很好。 –

+0

当它不是5时,我想我会抛出一个异常。我没有发布所有的代码。迈克西摩,是正确的,我正在阅读有关复制构造函数。 – user1876942