默认情况下,从 getter 函数返回拷贝 (1) 或引用 (2) 更好?
class foo {
public:
std::string str () { // (1)
return str_;
}
const std::string& str () { // (2)
return str_;
}
private:
std::string str_;
};
我知道 2) 可能会更快,但由于 (N)RVO 而不必如此。 1) 对于悬空引用更安全,但对象可能会过期或永远不会存储引用。
当您编写类(class)但(尚)不知道性能和生命周期问题是否重要时,您的默认设置是什么?
附加问题:当成员不是纯字符串而是 vector 时,游戏是否会改变?
最佳答案
这真的取决于你对 默认行为 的期望。
您是否希望调用者看到对他们的 str_unbeknownst(真是一个词!)所做的更改?然后你需要传回一个引用。如果您可以拥有一个 refcounted 数据成员并将其返回,那可能会很好。
如果您希望调用者得到一份拷贝,请执行 1)。
https://stackoverflow.com/questions/2182408/