У меня есть следующая функция:
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 ) {...}
Я получаю предупреждение: "Ссылка Non-const lvalue на тип" MyObject "не может связываться с временным типом" MyObject ". Я могу решить это так:
MyObject obj = getObj();
if ( getNumber( obj ) > 35 ) {...}
Но это очень неудобно использовать. Я хочу создать другую функцию и использовать ее так:
int getNumber2( MyObject obj ) {
MyObject newObj; // now it 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 not a temporary variable I think :)
return getNumber( newObj );
}
Это означает, что вы не беспокоите MyObject
переданный как параметр getNumber()
, потому что это не тот, getNumber2
получает getNumber2
...
new
/new[]
. Проблема в том, что вы пытаетесь привязать временную ссылку к неконстантной ссылке.getNumber
приниматьgetNumber
, я думаю ... при условии, что вам не нужно изменять объект. (А если бы вам пришлось ... тогда не проходит ли временная победа над целью?)