如何保存类的实例列表? 我在C++中编写了一个RayTraceR,需要能够检查场景中的每个对象的交叉点(稍后会有优化),为了做到这一点,我需要保持一个运行的类实例列表。在创建新实例时更新的指针列表将不起作用,因为据我所知,在数组初始化后无法增加数组的大小。如果有一个,我很喜欢内置的(C++)解决方案。 < P> A应该是好的(并且 < P>创建一个向量(或 SET/COD> >,将你的场景中的对象指针作为静态类成员,并将所有的Ccor插入 < 到集合中,以及dtor从集合中删除this: // really pseudo-code -- not intended to compile as-is, but I hope it helps // convey the general idea. // class scene_object { static std::set<scene_object const *> instances; public: scene_object() : { instances.insert(this); } scene_object(scene_object const &other) { instances.insert(this); } // probably more ctors here... ~scene_object() { instances.delete(this); } }; std::set<scene_object> scene_object::instances; //真的是伪代码——不打算按原样编译,但我希望它能有所帮助 //传达大意。 // 类场景_对象{ 静态std::设置实例; 公众: 场景_对象():{instances.insert(this);} 场景对象(场景对象常量和其他){instances.insert(this);} //这里可能有更多的演员。。。 ~scene_object(){instances.delete(this);} }; std::set scene_object::instances;

如何保存类的实例列表? 我在C++中编写了一个RayTraceR,需要能够检查场景中的每个对象的交叉点(稍后会有优化),为了做到这一点,我需要保持一个运行的类实例列表。在创建新实例时更新的指针列表将不起作用,因为据我所知,在数组初始化后无法增加数组的大小。如果有一个,我很喜欢内置的(C++)解决方案。 < P> A应该是好的(并且 < P>创建一个向量(或 SET/COD> >,将你的场景中的对象指针作为静态类成员,并将所有的Ccor插入 < 到集合中,以及dtor从集合中删除this: // really pseudo-code -- not intended to compile as-is, but I hope it helps // convey the general idea. // class scene_object { static std::set<scene_object const *> instances; public: scene_object() : { instances.insert(this); } scene_object(scene_object const &other) { instances.insert(this); } // probably more ctors here... ~scene_object() { instances.delete(this); } }; std::set<scene_object> scene_object::instances; //真的是伪代码——不打算按原样编译,但我希望它能有所帮助 //传达大意。 // 类场景_对象{ 静态std::设置实例; 公众: 场景_对象():{instances.insert(this);} 场景对象(场景对象常量和其他){instances.insert(this);} //这里可能有更多的演员。。。 ~scene_object(){instances.delete(this);} }; std::set scene_object::instances;,c++,pointers,raytracing,C++,Pointers,Raytracing,您可以使用任意数量的STL容器 我在C++中写了一个光线跟踪程序,需要能够检查场景中每个对象的交集[…] /P> 标准方法是空间图。最常见的是使用八叉树,因为它们可以表示三维空间中的位置。简单地说,空间树的外观如下所示: struct SpatialNode { SpatialNode * children[8]; std::vector<object*> objects; }; 结构空间节点{ 空间节点*子节点[8]; 向量对象; }; 每个节点都有一个(隐式

您可以使用任意数量的STL容器

<>我在C++中写了一个光线跟踪程序,需要能够检查场景中每个对象的交集[…] /P> 标准方法是空间图。最常见的是使用八叉树,因为它们可以表示三维空间中的位置。简单地说,空间树的外观如下所示:

struct SpatialNode {
    SpatialNode * children[8];
    std::vector<object*> objects;
};
结构空间节点{
空间节点*子节点[8];
向量对象;
};
每个节点都有一个(隐式或显式)位置和大小。将新对象添加到世界场景时,树将穿过子对象(子对象占据被x-y、y-z和z-x平面分割的八分之一:4个在上,4个在下;4个在左,4个在右;4个在后,4个在前),并且该对象仅添加到可以完全包含它的最小节点。(显然,您需要能够计算对象的尺寸,以及它们是否可以完全包含在给定区域内。)


这样做的好处是,无论是在填充树还是在搜索树时,速度都相当快(只有被检查的树的部分才是真正相关的)。你可以在Wikipedia、GameDev.net和其他网站上读到几篇关于它的文章。

我接受这个答案,因为它告诉我为什么我应该首先使用优化的结构。谢谢当我想要销毁我得到的对象时:警告C4150:删除指向不完整类型“MyClass”的指针;由于每个对象的内存位置都是唯一的(因为每个对象都是独立创建的),因此不需要调用析构函数,只需在向量中存储指向每个对象的指针,这会使事情变得更简单。也许可以看看我对这个问题的回答,这是为了尝试使用更现代的指针。