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/

除非您希望在类的所有实例中访问静态变量,否则无需将其声明为静态的。

于 2013-06-11T23:12:44.343 回答