Tạo đối tượng và cấp quyền sở hữu cho vùng chứa bằng cách sử dụng unique_ptr là không có vấn đề gì. Làm thế nào sẽ loại bỏ một yếu tố bằng con trỏ thô?Làm thế nào để loại bỏ unique_ptr bởi con trỏ từ một container?
std::set<std::unique_ptr<MyClass>> mySet;
MyClass *myClass = new MyClass();
mySet.insert(std::unique_ptr<MyClass>(myClass));
// remove myClass from mySet?
Nếu con trỏ thô được bọc trong một 'unique_ptr tạm <> ', §20.7.1.4/2 đảm bảo rằng' set :: size_type set :: erase (key_type const &); 'overload ** ** sẽ hoạt động. Tuy nhiên, điều đó gần như được đảm bảo để tạo các vấn đề tồn tại đối tượng trừ khi một deleter tùy chỉnh được sử dụng cho tạm thời, vì vậy phương thức 'std :: find_if' có lẽ vẫn tốt hơn. – ildjarn
Tôi không tìm thấy phần liên quan trong tiêu chuẩn năm 1998, tiêu chuẩn sửa đổi năm 2003 hoặc bản thảo C++ 0X mới. Bạn có thể vui lòng hướng dẫn tôi đến tên của tài liệu chính xác mà bạn đang giới thiệu không? –
Tôi đang đề cập đến C++ 0x FDIS (N3290), §20.7.1.4/2, trang 549. – ildjarn