使用RAII简化将对象传递给其他没有复制的对象

问题描述 投票:-1回答:1
extern class objx;
class Someclass
{
public:
    void bar(objx);
    objx om;
};

void foo()
{
    Someclass c;
    c.objx (o);
    bar(o);
}

void Someclass::bar(objx& op)
{
//Save op in some local privatefield for later use
    om = op; //Here there should not be a copy;
}

以上代码是错误的吧?因为当o在foo()中超出范围时,它会被破坏。有没有办法不将o复制到bar中的新对象中?例如使用bar(objx && op),这样我们就不必复制对象或使用智能指针,并且可以肯定地避免了new / delete?当bar()返回op时,op将超出范围,对象将被销毁。

c++ parameter-passing rvalue-reference raii
1个回答
0
投票

以上代码是错误的吧?因为当o在foo()中超出范围时,它会被破坏。

这取决于“将操作保存在某些本地privatefield中以备后用”的含义。复印正确。不会引用该对象。

有没有一种方法可以不将o复制到bar中的新对象中?

您可以移动。

© www.soinside.com 2019 - 2024. All rights reserved.