跟踪所有结构体的静态结构数组

a static struct array to keep track of all structs

本文关键字:静态 结构 数组 结构体 跟踪      更新时间:2023-10-16

我必须创建一个结构体,一个静态变量来跟踪有多少结构体是活的,还有一个所有当前结构体的列表。我在创建这个列表和适当的构造函数时遇到了麻烦。目前我有

class MyStruct{
public:
    static int i;
    static MyStruct *AllStructs;
    MyStruct(){i++; (AllStructs++)=this;} //error happens here
};
int MyStruct::i=0;
MyStruct MyStruct::*AllStructs;
int main(){...}

正如您所看到的,我试图通过创建一个静态数组来实现这一点,该数组作为构造函数的一部分被添加,但是编译器在我指示的地方给了我一个错误:"左值需要作为赋值的左操作数"。它不允许我给静态数组赋新结构。

我做错了什么?记住,指针是我生活的祸根,所以请像对小孩子解释一样向我解释。非常感谢。

当您定义MyStruct MyStruct::*AllStructs;时,您所做的就是为指向MyStruct对象的单个指针分配内存,而不是为它们的数组创建空间。你想要的数组需要有一个有效的初始化内存位置,它可以存储所有你想要的指针的副本。这可能会变得混乱,所以您应该使用静态std::vector来管理MyStruct的内存分配。就像这样简单:

#include <vector>
#include <iostream>
class MyStruct{
public:
static std::vector<MyStruct*> AllStructs;
MyStruct(){AllStructs.push_back(this);}
};
std::vector<MyStruct*> MyStruct::AllStructs;

int main() {
    MyStruct ms;
    MyStruct ms2;
    std::cout << MyStruct::AllStructs.size() << std::endl;
}

希望有帮助!