4

静的と宣言されたコンテナーを持つクラスがあります。

class test {

public: 
  test(const ClassA& aRef, const std::string& token); 
  test(const test& src); 
  ~test();

private: 
  ClassA& m_ObjRef;
  static std::vector<std::string> s_toks; 
};

s_toks コンテナーは、test.cpp で定義されたコンストラクターで次のように初期化されます。

std::vector<std::string> test::s_toks; 

    test::test(const ClassA& aRef, const std::string& token) 
       : m_ObjRef(aRef)
    {
       my_tokenize_function(token, s_toks);
    }

    test::test(const test& src)
       : m_ObjRef(src.m_ObjRef)
    {   
       /* What happens to s_toks; */
    }

s_toks をコピーせず、新しくコピーしたオブジェクトから s_toks にアクセスすると、空になります。これを処理する正しい方法は何ですか?

4

3 に答える 3

14

静的データ メンバーは、クラスの単一のインスタンスにバインドされません。これはすべてのインスタンスに対して存在し、クラス コピー コンストラクターでそれを変更しようとしてもほとんど意味がありません (インスタンスの何らかのカウンターを保持するために使用している場合を除きます)。同様に、どのクラス コンストラクターでも "初期化" することはほとんど意味がありません。

于 2013-06-11T21:35:47.943 に答える
6

静的メンバーはクラスのすべてのインスタンス間で共有されるため、コンストラクターで初期化したり、コピー コンストラクターでコピーしたりすることは意味がありません。

于 2013-06-11T21:36:18.157 に答える
0

他の人のコメントをサポートするこのリンクは、例を含む適切な説明を提供します: http://www.learncpp.com/cpp-tutorial/811-static-member-variables/

クラスのすべてのインスタンスで static 変数にアクセスする場合を除き、static と宣言する必要はありません。

于 2013-06-11T23:12:44.343 に答える