私は主にCとJavaのバックグラウンドからC++を学んでおり、オブジェクトをコピーせずにC++でオブジェクトを返すための最良の方法に興味があります。私の理解では、C ++ 11は、一時変数からデータを移動するために右辺値参照(&&)を導入しました(コピーとは対照的です)。例:
std::string getStr(){
return "Hello";
}
std::string &&hello = getStr();
私が考えることができる別の方法は、共有ポインターを使用することです。
std::tr1::shared_ptr<std::string> getStr(){
std::tr1::shared_ptr<std::string> hello(new std::string("Hello"));
return hello;
}
auto hello = getStr();
おそらく右辺値の参照の方が良いと思いますが、使用する前にまずセカンドオピニオンをお願いします。どちらが良いですか?
また、コンストラクターを使用して設定されない場合は、クラス内のフィールドを右辺値参照にすることをお勧めしますか?例:
class StringHolder{
public:
std::string &&str;
};
StringHolder sh;
sh.str = getStr();
どうもありがとうございました!