【发布时间】:2014-05-26 12:46:34
【问题描述】:
我正在使用 stl set 容器类来存储指向对象的指针。在从 stl 集合中读取时,对于程序的不同运行,由于内存(地址)动态分配给对象,对象的顺序会发生变化。
假设对象是 A、B、C,它们在第一次运行时的地址是 10、16、12。因此,当我将这些对象插入 set 并检索它们时,我将得到输出为 A C B (b'caz 10
有什么方法可以让我按特定顺序获得输出?
重载比较器(自定义比较器)可以解决问题,但是这种情况下我必须将它作为模板参数传递,这会导致在很多地方修改代码。有什么方法可以避免修改我的代码,仍然能够编写客户比较器?
【问题讨论】:
-
避免使用指针,将对象存储在容器中(不是指针),不要解决实际问题。
-
为什么要在容器中存储指针?存储对象而不是指向对象的指针是非常安全的。事实上,存储指针(而不是
std::unique_ptrs 或std::shared_ptrs)可能会导致内存泄漏,而存储对象则不会,因此它比您所做的更安全。 -
@MaxLybbert :是的,我理解存储指针的问题,但我只能根据给定的需要存储指针。