仕事で久々にC++を使いはじめて、抜けていた所を勉強し直しています。
class Hoge {
public:
Hoge(std::string n): name(n) {};
std::string getName() { return name; };
private;
std::string name;
}
みたいなクラスがあったときに、これだとgetNameはstringのコピーになるから、参照を返すように
string& getName();
したいけど、getNameで取って来たものをまた参照でどこかに保持させると、Hogeがデストラクトされたときにそのstringが不正参照になってしまいます。
この例では軽いstringだから参照じゃなくてコピーを返してもいいのですが、もっと重たいメンバだったりするとコピーは返すのは現実的ではなくなります。
Exceptional C++という本を見ると、この例のような場合に「オブジェクトの生存期間に気をつけよう」みたいなことが書いてあります。
短い寿命のクラスの場合には気をつけるとか、場合によって考えるしかなさそうです。
ふぅ、Javaか、せめてD言語が使えればなぁ…。
