请问下面代码有什么问题?
或者说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();
}
当然可以,但是在getKitty()不为空时内存里就多了一份无用的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;
}
};
网友评论