質問: this->size(); if (__size + 1 > this->capacity()) this->_M_mutate(__size, size_type(0), 0, size_type(1)); traits_type::assign(this->_M_data()[__size], __c); this->_M_set_length(__size + 1); } ``` ライブラリなどでこの・・・「同じ関数が別物として定義される」ものを作るとメモリ効率が下がりますよね。 特に、C++のような低レベルのプログラミングをジャンジャンできるような言語だとメモリを無駄遣いするわけにはいかないかと思います。 STLを眺めていて以下のような記述を目にしたことがあります。 (ちょっと違うかもしれません。) ``` push_back(){ _Base::push_back(); } ``` うーーーん。ちょっと微妙。 カプセル化に反する?? 何度もよく使うようなメソッドをまとめといて、それを呼び出している感じですね。 これだと、C言語でオブジェクト指向プログラミングをしているのとあんまり変わらないような気がします。(Linux Kernelみたいな) **同じメソッド、あるいはかなり近い、似たようなメソッドを使いまわしたい場合、どうすればよいのでしょうか?** メモリ効率のモヤモヤ感とオブジェクト指向の考え方がちょっと難しいですね。 ポリモーフィズムなどはメモリを食いそうで仕方がないとという感じがしますが、Cに比べるとちょっとメモリ効率が悪い感じですかね。 分かる方教えてください。 環境は、Linux g++ でやりました。
回答: ``` push_back(){ _Base::push_back(); } ``` やはり、これを基本に工夫していけば良いのだと思います。 あるいは、フリー関数(非メンバ関数)で書いておいて必要に応じて呼び出すという手もあります。