C言語でSingleton
Java言語で学ぶデザインパターンを参考にやってみた。
まずはヘッダファイル。
singleton.h
typedef int *Singleton;
Singleton get_instance();
Singletonという型を宣言。実際に利用するときはint *ではなくなる可能性が高い。
get_instance()でオブジェクトを取得する。
続いてsingeton自体となるファイル。
singleton.c
#include <stdlib.h>
#include "singleton.h"static Singleton singleton;
Singleton get_instance()
{
/* ロックする */
if (!singleton) {
singleton = malloc(sizeof(*singleton));
}
/* ロック解除 */
return singleton;
}
singletonの宣言にstaticを付けることで、外部のファイルからアクセスできなくする。
get_instanceではそれで領域がとれていなかったらとるようにして、singletonを返す。
スレッドの事とかを考慮して、ロックを掛ける必要がでてくる事も出てくるかもしれない。
最後に利用するファイル。
main.c
#include <stdio.h>
#include "singleton.h"int main()
{
Singleton obj1;
Singleton obj2;printf("Start.\n");
obj1 = get_instance();
obj2 = get_instance();
if (obj1 == obj2) {
printf("obj1とobj2は同じインスタンスです。\n");
}
else {
printf("obj1とobj2は同じインスタンスではありません。\n");
}
printf("End.\n");return 0;
}
実行結果は
Start.
obj1とobj2は同じインスタンスです。
End.
一応意図どおりできました。
ただ、mainの方で、
Singleton s;
s = malloc(sizeof(*s));
みたいな事は防げないので、厳密にはSingletonではないのだろうな。
あとfreeしてないのも問題か
| 固定リンク
« | トップページ | C言語でSingleton 2 »
コメント