2
มีเจตนาโดยคณะกรรมการมาตรฐาน C ++ หรือไม่ว่าใน C ++ 11 unordered_map ทำลายสิ่งที่แทรก?
ฉันเพิ่งเสียชีวิตไปสามวันในการติดตามข้อผิดพลาดที่แปลกมากที่ unordered_map :: insert () ทำลายตัวแปรที่คุณแทรก ลักษณะการทำงานที่ไม่ชัดเจนนี้เกิดขึ้นในคอมไพเลอร์ล่าสุดเท่านั้น: ฉันพบว่า clang 3.2-3.4 และ GCC 4.8 เป็นคอมไพเลอร์เพียงตัวเดียวที่แสดง "คุณลักษณะ" นี้ นี่คือโค้ดที่ลดลงบางส่วนจากฐานรหัสหลักของฉันซึ่งแสดงให้เห็นถึงปัญหา: #include <memory> #include <unordered_map> #include <iostream> int main(void) { std::unordered_map<int, std::shared_ptr<int>> map; auto a(std::make_pair(5, std::make_shared<int>(5))); std::cout << "a.second is " << a.second.get() << std::endl; map.insert(a); // Note we are NOT doing insert(std::move(a)) std::cout …