C言語でOOP*3

C言語OOPするには機能の状態を保持する構造体を作ってその構造体のデータを元に処理する関数を書くのが一般的だと思う。*1

で、私がC言語OOPみたいなのを調べているときにちょっと疑問に思ったこと。
なぜ、dkcAllocArcfour()みたいにでいちいちmallocでメモリ確保してポインタを返すか?

私の見解は以下。
例えば、構造体だけを用意して初期化


struct st obj;
init(&obj);
みたいなのは、初期化したものを
もう一回初期化して

struct st obj;
init(&obj);
init(&obj);//プログラマのミス
状態遷移を乱すかもしれないから。
私はこのように初期化を2回しても大丈夫なように実装するのが望ましいと考えるのでとりあえず、mallocで確保した領域を返すようにしている。

ちなみにC言語OOPのお手本のようなglibはこの方式を用いている。

*1:例:glibや dkutil_c