1

クラスAとBについて考えてみます。クラスAはクラスBと友好的です。クラスBにはプライベートコンストラクターがあります。クラスAはクラスBインスタンスを作成できますか、それともプライベートコンストラクターは、フレンドクラスであっても、クラスをインスタンス化できないことをコンパイラーに示しますか?
サンプルコードは次のとおりです。

class B;

class A {
    void myFunction() {
        B newBobject;
    }
};

class B {
    private:
        B() {}
    public:
        int someData;
        friend class A;
};

また、C++03を使用していることに注意してください。C ++ 03で無効な場合、C ++ 11で許可されますか?

副次的な質問として、シングルトンメソッドはどのように関連していますか?オブジェクトの唯一のインスタンスをインスタンス化することを具体的に扱っていますか、それとも他の何かですか?

4

1 に答える 1

3

あなたのコード(あなたのアイデアにもっと似ています)は実際にはエラーがなく、C++03c++11の両方で有効です。

ただし、コードには2つのエラーがあります。タイプBのオブジェクトを作成するには、Bの定義全体を確認する必要があります。つまり、BとAの定義を交換する必要があります。

次に、myfunction公開するか、クラスA内から呼び出す必要があります。

他の質問に答えるために..ほとんどのシングルトンはこのように実装されています。

class Singleton{
private:

   Singleton(){}
public:
   static Singleton& GetInstance(){
       static Singleton instance;
       return instance;
   }
};

これにより、シングルトンクラス(およびあなたが発見した友人)以外の誰もがクラスのインスタンスを作成できなくなるため、1オブジェクトルールを適用する方が簡単です。シングルトンはとしてアクセスされSingleton::GetInstance()ます。

これと他の可能な実装はウィキペディアに示されています。

于 2013-01-09T01:26:40.237 に答える