是否需要在复制构造函数中复制静态成员,如果是,该怎么做?

cpp*_*der 4 c++ static copy-constructor

我有一个带有声明为static的容器的类:

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; 
};
Run Code Online (Sandbox Code Playgroud)

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; */
    }
Run Code Online (Sandbox Code Playgroud)

如果我不复制s_toks,并且从新复制的对象访问s_toks,则它为空.处理这个问题的正确方法是什么?

jua*_*nza 13

静态数据成员未绑定到类的单个实例.它存在于所有实例中,并且尝试在类复制构造函数中修改它没有多大意义(除非您使用它来保留某种实例计数器).出于同样的原因,在任何类构造函数中"初始化"它都没有意义.


Bal*_*arq 6

静态成员在类的所有实例之间共享,因此在构造函数中初始化它是没有意义的,也不会在复制构造函数中复制它.