У меня есть функция, возвращающая ссылку на экземпляр моего класса «запись».
record& get_record(int key) {
return lookup(key);
}
Это эффективно, он возвращает ссылку, а не значение. Сейчас немного модифицирую.
record& get_record(int key) {
if (valid(key))
return lookup(key);
else {
record x;
x.valid=false;
return x; //Here I really want to return a temporary variable
// and not a reference to a local variable.
}
}
Верно ли, что возвращать ссылку на локальную переменную не очень хорошая идея? и как мне вернуть x таким образом, чтобы он стал временной переменной?
static
. - person Scheff's Cat   schedule 25.05.2018lookup
не может обрабатывать несуществующий ключ, означает, что вам, вероятно, потребуется выполнить 2 поиска: один раз, чтобы увидеть, существует ли ключ, и второй, чтобы получить значение. Если вы изменитеlookup
так, чтобы он возвращал итератор (или умный указатель, допускающий значение NULL), вы сможете выполнить половину работы, проделанной в этой функции! - person UKMonkey   schedule 25.05.2018