電子書籍の厳選無料作品が豊富!

現在、以下の構成でアプリケーションを開発しています。

フォーム(C#)⇔ラップDLL(C++/CLI)⇔処理(C++ネイティブのDLL多数)

C++DLLのひとつにクラスAがあるとします。
このクラスAを含むDLLは他のDLLにリンクされています。
このクラスAの実体がアプリケーションの中で一つしかないようにするにはどのようにコーディングすれば良いのでしょうか?
シングルトンパターンについて書かれたHPを参考につくってみたのですが、アプリケーションを実行するといくつも実体が作られています。

class __declspec(dllexport) DataStore
{
private:
DataStore():// コンストラクタ
{};
~DataStore() {};// デストラクタ

public:
// このインスタンスを使用してメンバにアクセスする。
static DataStore&GetInstance()
{
static DataStoremyInstance;
returnmyInstance;
}
};

A 回答 (1件)

2つ確認したいことがあります。


・ひょっとして、GetInstance()メソッドの(宣言ではなく)定義をヘッダーファイルに書いていませんか?
・もし上記のようになっているならば、GetInstance()メソッドの定義をソースファイルに移してみたらどうなりますか?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

はい、質問のソースコードはヘッダファイルに書いています。
GetInstance()メソッドをcppに持って行くと正常に動作しました!
ヘッダに直接書いていた場合にダメなのはどうしてでしょうか?
inline展開されてmyInstanceが別実体になってしまったのでしょうか?

お礼日時:2012/08/03 22:56

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!