我正在开发一个用于将现有代码移植到不同平台的引擎。现有代码是使用第三方 API 开发的,我的引擎将根据我的新平台重新定义这些第三方 API 函数。
以下定义来自API:
typedef unsigned long shape_handle;
shape_handle make_new_shape( int type );
我需要重新定义 make_new_shape
并且我可以选择重新定义 shape_handle
。
我已经定义了这个结构(简化):
struct Shape
{
int type
};
make_new_shape
的调用者不关心 Shape
的底层结构,它只需要一个“句柄”,这样它就可以调用如下函数:
void `set_shape_color( myshape, RED );`
其中 myshape
是形状的句柄。
我的引擎将为 Shape
对象管理内存,其他要求指示引擎应将 Shape
对象存储在列表或其他可迭代容器中。
我的问题是,如果 Shape
本身要存储在 std::list 中——一个迭代器、一个指针、一个索引,那么表示这个句柄的最安全方法是什么?
最佳答案
如果你试图在对象被删除后访问它们,迭代器或指针都会做坏事,所以两者本质上都不安全。迭代器的优势在于它可用于访问集合中的其他成员。
因此,如果您只想访问您的 Shape,那么指针将是最简单的。如果您想遍历列表,请使用迭代器。
索引在列表中是无用的,因为 std::list 不会重载 [] 运算符。
关于c++ - 我应该返回一个迭代器还是一个指向 STL 容器中元素的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3699797/