C++ の setter 関数は copy&move がそこそこいける2021年11月20日 12時37分37秒

最近の C++ の復習の備忘録。C++ で xvalue が導入されたため、setter 関数を最適化するのが若干厄介になった。

複数の setter を実装したり、テンプレートを使ったりしなければ、copy&move がそこそこのパフォーマンスを保ったまま、コードを減らせる。

void setName( std::string name )

{
    d_name = std::move( name );
}

手間をかければ、こちらの方が良いが、コードの量が増える。

void setName( const std::string& name )

{
    d_name = name;
}

void setName( std::string&& name )

{
    d_name = std::move( name );
}

テンプレートで実装すれば、二つ書かなくても良くはなるが、型が曖昧になったり、実装をヘッダに置く必要がある。厳しく制約するのであれば、さらに手間が掛かる。

template> typename T>
void setName( T&& name )

{
    d_name = std::forward<T>( name );
}