この例を設定しました:
class UsefulClass {
public:
int id;
const bool operator< (const UsefulClass &other) const {
return this->id > other.id;
}
UsefulClass(int _id): id(_id) {
std::cout << "constructing " << id << std::endl;
}
~UsefulClass() {
std::cout << "destructing " << id << std::endl;
}
};
std::set<UsefulClass> set;
void create() {
UsefulClass object_1(1);
UsefulClass object_2(2);
set.insert(object_1);
set.insert(std::move(object_2));
std::cout << "create end" << std::endl;
}
int main() {
create();
std::cout << "main end" << std::endl;
}
set
プログラムの最後にオブジェクトが削除されると、オブジェクトが一度破壊されることを期待しています。ただし、オブジェクトは 2 回削除されます。
constructing 1
constructing 2
create end
destructing 2
destructing 1
main end
destructing 1
destructing 2
set.insert
ここでコピーを作成するのはなぜですか?