对象构造函数访问中对象的 C++ 静态 vector ?

标签 c++ pointers object vector static

我想要一个对象内部的静态 vector ,它存储指向曾经构造的每个对象的指针,这样我就可以运行一个循环遍历每个对象。

//Object.h
public:
  Object();
  stuff();
  static vector<Object*> objects;

//Object.cpp
vector<Object*> Object::objects;
Object::Object(){ objects.push_back(this); }
Object::stuff(){ /*Do stuff*/ }

Is this correct?

我希望它能工作:

//ObjectB.cpp
Object::objects[0]->stuff();

当我运行它时,出现“访问冲突读取位置 0xCCCCCCCC”错误。

最佳答案

假设“ObjectB”类继承了“Object”类,那么您的 Object.h 和 Object.cpp 就可以了。

// Object.h
static vector<Object*> objects; // [Is this correct?][1]

-> OK,静态成员声明

// Object.cpp
vector<Object*> Object::objects; // [Is this correct?][1]

-> 好的,静态成员初始化(在你的 cpp 文件中)

// Object.h
vector<Object*> Object::objects; //[error C2838][2]

-> 这是不对的,我假设 ObjectB 继承了 Object,你不必声明它。要引用您的静态成员,您只需执行“Object::objects”。不要忘记从您的 ObjectB 构造函数调用您的 Object 构造函数,否则您的 ObjectB 实例将不会添加到您的 Object::objects vector 中:

// ObjectB.cpp
ObjectB() : Object() // Calling Object() will add your instance to "objects" vector
{
  ...
}

然后:

Object::objects.stuff(); // or with ->, i.e. Object::objects->stuff()

-> 这应该有效(如果您没有忘记从 ObjectB 构造函数调用 Object 构造函数)。

对于“是否有另一种方法来跟踪所有对象”这个问题,嗯,这取决于您要实现的目标。

关于对象构造函数访问中对象的 C++ 静态 vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26173725/

相关文章:

c++ - 有什么方法可以使用c++在快速xml中通过标签获取xml值

c - 在 C 中将 2D 数组 [x] [y] 作为 1D 数组 [z] 访问

javascript - 在javascript对象中找到最接近的低 "key"

scala - 为什么在 Play Framework 中使用 @Singleton 而不是 Scala 的对象?

javascript - 从 URL 创建对象树

c++ - 在 natvis 文件中使用宏?

c++ - 当人们忘记调用虚拟的基类版本时,有没有办法扫描?

c++ - 在 C/C++ 源代码中包含 Git 提交哈希和/或分支名称

c - 无法创建二叉搜索树

c - 得到 C 错误 : conversion to non-scalar type requested