[868] Re:List 4-6
投稿者:マスタング
2007/02/20 02:13:25
>「ポインタ完全制覇」のp218のList 4-6のプログラムで質問させてください。
>
>76--79行目でmallocを使っているのは何故なのでしょうか。
>
>代わりに、
>
>return st_line_buffer;
>
>では駄目なのでしょうか。違いがわからないのですが。
これは、オブジェクト指向の防御的コピーに近いですが、
read_line()が、st_line_bufferを素直に返している訳ではないので
ちょっと違うかもしれません。
read_line.cファイルが1つのオブジェクト、st_line_bufferがprivateな
メンバと考えると、実装詳細を直接戻すと、カプセル化が崩れるという
考え方も可能だと思います。
違いは以下です。
// もし、read_line()で、st_line_bufferを返す場合
char s1, s2;
s1 = read_line(fp); // 例えば、s1が、"abc"
s2 = read_line(fp); // 例えば、s2が、"def"
// ここで、s1もs2も、"def"となる!
// もし、read_line()で、コピーを返せば、
// s1は"abc"、s2は"def"となる。