2016-06-22 1 views
2

クラスMyClass1の静的データバッファに格納されている、クラスタイプMyClass2のオブジェクトへの静的で定数ポインタを初期化します。インスタンス化されます。スタティックメモリバッファへのスタティックconstポインタを作成するには、newを使用してください。

これは動作しません:

class MyClass1 { 
    public: 
     MyClass1() 
     { 
      _my_class_2_ptr = new (_my_class_2_buf) MyClass2(); 
     } 

    private: 
     static MyClass2 *const _my_class_2_ptr; 
     static char *_my_class_2_buf = new char[sizeof(MyClass2)]; 
}; 

はこのような何かを達成する方法はありますか?

答えて

4

変数が静的である場合、コンストラクタで変数を初期化することはできません。それは意味をなさない!やりたいことあなたはクラスの外staticメンバ変数の定義とintializationsを移動することができます(ヘッダーに)

class MyClass1 { 
    // member  
    public: 
     static MyClass2 *const _my_class_2_ptr; 
     static std::aligned_storage_t<sizeof(MyClass2)> _my_class_2_buf; 
}; 

(CPP)で

std::aligned_storage_t<sizeof(MyClass2)> MyClass1::_my_class_2_buf; 
MyClass2* const MyClass1::_my_class_2_ptr = new (&MyClass1::_my_class_2_buf) MyClass2; 
+0

。静的変数はクラスに共通なので、クラスがインスタンス化されるたびにそれらを再初期化することは意味がないと思います。しかし、この場合、私はMyClass1をシングルトンにしたかったので、それは一度だけインスタンス化することができるので、本当に問題ではないと思います。 – Bitrex

+0

std :: aligned_storage :: typeの 'type'がありません - 非常に悪いです! –

+0

@DieterLücking彼は 'aligned_storage'を使用していません。 –

2

のようなものです。

class MyClass1 { 
    public: 
     MyClass1() {} 

    private: 
     static MyClass2 *const _my_class_2_ptr; 
     static char *_my_class_2_buf; 
}; 

char *MyClass2::_my_class_2_buf = new char[sizeof(MyClass2)]; 
MyClass2 *const MyClass1::_my_class_2_ptr = new (_my_class_2_buf) MyClass2(); 
関連する問題