std::设置唯一指针
std::set Unique Pointer
struct departure_compare {
bool operator() (const Leg* lhs, const Leg* rhs) const
{
return lhs->CurrentDepartureTime() < rhs->CurrentDepartureTime();
}
};
class Station
{
uint station_number_;
std::set<Leg *, departure_compare> departure_legs_in_order_; // legs that depart from this station in order of departure time
public:
Station(uint station_number) : station_number_(station_number) {};
void addDepartureLeg(Leg *leg) { departure_legs_in_order_.insert(leg); };
const std::set<Leg *, departure_compare>& DepartureLegs() const { return departure_legs_in_order_; };
uint StationNumber() { return station_number_; };
};
我在循环中称之为
Leg *new_leg = new Leg();
start_station->addDepartureLeg(new_leg); // start_station of type station
现在我意识到,有时,它没有将new_leg
插入到这个结构中。现在我看了一下文档,上面说如果它已经在set结构中,那么它就不会插入new_leg
。但这怎么可能,如果我总是创建一个新的指针(地址不应该是唯一的)?
您不是基于地址确定唯一性,因为departure_legs_in_order_
被声明为
std::set<Leg*,departure_compare> departure_legs_in_order_;
你已经告诉set
使用departure_compare
来确定哪些Leg*
的值是相等的。如果两者的Leg::CurrentDepartureTime()
相同,则它们相等,在这种情况下,insert
将返回现有条目。如果你没有注意到,还会漏出指针,并忘记清理。
相关文章:
- 何时在引用或唯一指针上使用移动语义
- C++优先级队列,按对象的唯一指针的特定方法升序排列
- 如何使用Visual Studio 2017在C++中为参数化对象数组使用唯一指针
- 如何更改唯一指针向量的可见性
- 共享指针和具有自定义删除程序的唯一指针之间的语法差异背后的任何原因
- C++尝试深度复制唯一指针时出现内存访问冲突
- 使用 RTTI 克隆唯一指针的向量
- 为什么我无法创建唯一指针
- 如何将唯一指针的 std::vector 转换为原始指针的 std::span?
- 将唯一指针的指针传递给采用双指针的函数
- 在什么情况下,需要共享智能指针而无法使用唯一指针?
- C++唯一指针的向量
- 对带有唯一指针的 std::thread 使用类成员函数时出现编译错误
- 指向基类的唯一指针
- 添加要映射的对象的唯一指针
- 智能指针(唯一指针)和引用
- 唯一指针是否在堆或堆栈上分配内存?
- 尝试设置唯一指针布尔数组的值时BAD_ACCESS错误
- 使用唯一指针调用函数会使我的程序崩溃
- 智能指针(唯一指针)总是比普通指针更可取