我有以下功能:
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 );
}
这意味着您不必打扰作为参数传递给
MyObject
的getNumber()
,因为那不是getNumber2
所得到的。关于c++ - 这里有内存泄漏吗?试图通过函数传递对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20893202/