
項目 16:const メンバ関数はスレッドセーフにする
|
101
項目 16:const メンバ関数はスレッドセーフにする
数学分野のソフトウェアを開発する場合、多項式を表現するクラスがあれば便利だと思うことが
あります。このクラスには恐らく多項式の根、すなわち多項式の零点11 を求める関数もあれば有用
でしょう。このような関数は多項式を変更しないため、const と宣言するのが自然です。
class Polynomial {
public:
using RootsType = // data structure holding values
std::vector<double>; // where polynomial evals to zero
… // (see Item 9 for info on "using")
多項式の零点を保持するデータ構造
(「using」については項目 9 を参照)
RootsType roots() const;
…
};
多項式の根の算出はコスト高のため、その必要がなければ算出せずに済ませたいものです。算出
しなければならないとしても、何度もしたくないことは間違いありません。そのため、算出しなけ
ればならない場合は、求めた根をキャッシュし、roots がキャッシュした値を返すよう実装してみ
ましょう。基本となる方式を示します。
class Polynomial {
public:
using RootsType = std::vector<double>;
RootsType