std::设置唯一指针

std::set Unique Pointer

本文关键字:指针 唯一 设置 std      更新时间:2023-10-16
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将返回现有条目。如果你没有注意到,还会漏出指针,并忘记清理。