如何分配类中的静态成员?

use*_*759 5 c++ variables static

如果我有类似的课程

class MyClass {
   public:
      int myMember1;
      int myMember2;
      int myMember3;
};
Run Code Online (Sandbox Code Playgroud)

每次我实例化一个MyClass连续三个空间的对象int被分配,那么当我有类似的东西时

class MyClass {
   public:
      static int myMember1;
      int myMember2;
      int myMember3;
};
Run Code Online (Sandbox Code Playgroud)

这次如何分配内存?

我问,因为当我声明同一个类的多个实例时,我不完全确定如何分配内存,是否有指向静态成员的指针?

Zey*_*maz 5

正如其他人已经说过的那样,您必须在类定义之外为静态成员变量显式分配空间.

在回答您的其他问题时,静态成员变量与类对象无关.也就是说,即使您的MyClass对象不再存在(直到程序终止),它们仍将继续存在,并且可以在您的类的所有实例之间共享.

假设您创建了MyClass类的多个实例,如下所示:

class MyClass {
public:
  static int myMember1;
  int myMember2;
  int myMember3;
};

int MyClass::myMember1 = 1;

int main()
{
   MyClass mc1;
   MyClass mc2;

   mc2.myMember1 = 2;

   std::cout << mc1.myMember1 << '\n';
   std::cout << mc2.myMember1 << '\n';
   return 0;
 }
Run Code Online (Sandbox Code Playgroud)

输出将是:

2
2
Run Code Online (Sandbox Code Playgroud)

  • 值得指出的是,尽管`mc1.myMember1`是合法的,但它的风格很差.您通常希望编写`MyClass :: myMember1`以清楚地表明该值与特定实例无关. (3认同)