我有以下功能:

int getNumber( MyObject &obj ) {
    .....
}


我可以这样:

MyObject obj; // obj.x = 10; obj.y = 20; ...setting up the object
if ( getNumber( obj ) > 35 ) { // something to do...
}


但是当我尝试做这样的事情时:

MyObject getObj() { // i need to return an object here
    MyObject newObj; // setting up the object: newObj.x = .....
    return newObj;
}
if ( getNumber( getObj() ) > 35 ) {...}


我收到警告:“对类型为'MyObject'的非常量左值引用无法绑定至类型为'MyObject'的临时对象”。我可以这样解决:

MyObject obj = getObj();
if ( getNumber( obj ) > 35 ) {...}


但是使用起来非常不舒服。我想创建另一个函数并像这样使用它:

int getNumber2( MyObject obj ) {
    MyObject newObj; // now it's not a temporary variable I think :)
    return getNumber( newObj );
}
if ( getNumber2( getObj() ) {...}


这里有内存泄漏问题吗?也许有一些有趣的方法可以解决该警告? :)

最佳答案

它告诉您,调用getNumber( getObj() )时,不应允许getNumber修改对象。

要解决此问题,请尝试:

int getNumber(const MyObject &obj ) {
  // You code should not modify obj
}


顺便说一句,没有内存泄漏。

对于您的int getNumber2( MyObject obj ),我看不到通话的重点

int getNumber2( MyObject obj )
{
    MyObject newObj; // now it's not a temporary variable I think :)
    return getNumber( newObj );
}


这意味着您不必打扰作为参数传递给MyObjectgetNumber(),因为那不是getNumber2所得到的。

关于c++ - 这里有内存泄漏吗?试图通过函数传递对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20893202/

10-08 23:25