請問下面代碼有什么問題?
或者說kitty->getName()為""時有什么問題。
const std::string& Cat::getKittenName() const
{
Kitten* kitty = getKitty();
return kitty->getName();
}
在返回值為""時,其實返回的是一個針對臨時string的引用,是invalid的.
那改成這樣行么
std::string Cat::getKittenName() const
{
Kitten* kitty = getKitty();
return kitty->getName();
}
當(dāng)然可以,但是在getKitty()不為空時內(nèi)存里就多了一份無用的copy。
解決這個問題可以用如下方法
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;
}
};