請(qǐng)問(wèn)下面代碼有什么問(wèn)題?
或者說(shuō)kitty->getName()為""時(shí)有什么問(wèn)題。
const std::string& Cat::getKittenName() const
{
Kitten* kitty = getKitty();
return kitty->getName();
}
在返回值為""時(shí),其實(shí)返回的是一個(gè)針對(duì)臨時(shí)string的引用,是invalid的.
那改成這樣行么
std::string Cat::getKittenName() const
{
Kitten* kitty = getKitty();
return kitty->getName();
}
當(dāng)然可以,但是在getKitty()不為空時(shí)內(nèi)存里就多了一份無(wú)用的copy。
解決這個(gè)問(wèn)題可以用如下方法
class Cat {
static const std::string missingKittenName;
public:
const std::string& Cat::getKittenName() const
{
Kitten* kitty = getKitty();
if (kitty)
return kitty->getName();
else
return missingKittenName;
}
};