std :: set Unique Pointer

que*_*sis -3 c++ pointers std

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_; };
};
Run Code Online (Sandbox Code Playgroud)

我把它称为循环

Leg *new_leg = new Leg();
start_station->addDepartureLeg(new_leg); // start_station of type station
Run Code Online (Sandbox Code Playgroud)

现在我认识到,有时,它不会插入new_leg到这个结构中.现在我查看了文档,该文档说如果它已经在set结构中,那么它就不会插入new_leg.但是,如果我总是创建一个新指针(地址不应该是唯一的),这怎么可能呢?

Tob*_*ght 5

您没有根据地址确定唯一性,因为 departure_legs_in_order_声明为

std::set<Leg*,departure_compare> departure_legs_in_order_;
Run Code Online (Sandbox Code Playgroud)

你告诉过setdeparture_compare用来确定哪些Leg*值相等.并且如果Leg::CurrentDepartureTime()两者相同则它们是相等的,在这种情况下insert将返回现有条目.如果你没有注意到,请漏掉你的指针,忘了把它清理干净.