A
他の人は、安い移動コンストラクターを持っていないかもしれないケースをカバーしました。私はあなたがそうすると思いますA
。ただし、「out」パラメーターを渡す必要がある状況がもう1つあります。
がまたはA
のようなタイプであり、「out」パラメータにすでに再利用可能なリソース(メモリなど)があることがわかっている場合は、可能であればそのリソースを再利用するのが理にかなっています。たとえば、次のことを考慮してください。vector
string
f
void get_info(std::string&);
bool process_info(const std::string&);
void
foo()
{
std::string info;
for (bool not_done = true; not_done;)
{
info.clear();
get_info(info);
not_done = process_info(info);
}
}
vs:
std::string get_info();
bool process_info(const std::string&);
void
foo()
{
for (bool not_done = true; not_done;)
{
std::string info = get_info();
not_done = process_info(info);
}
}
最初のケースではstring
、ループの実行時に容量が増加し、その容量はループの各反復で再利用される可能性があります。string
2番目のケースでは、反復ごとにnewが割り当てられます(小さな文字列最適化バッファーは無視されます)。
std::string
さて、これはあなたが決して価値によって戻ってはならないということではありません。この問題を認識し、ケースバイケースで工学的判断を適用する必要があるということだけです。