Nhóm chúng tôi chỉ chạy vào cùng một vấn đề được mô tả ở đây http://forums.codeguru.com/archive/index.php/t-514404.html, tức là gọi some_vec.resize(new_size)
, nơi N = new_size - some_vec.size()
với N> = 2, và VC10 mặc định-xây dựng tất cả các yếu tố mới N, trong khi GCC mặc định xây dựng một yếu tố duy nhất, như yếu tố nguyên mẫu , để sao chép-xây dựng nó N lần cho các yếu tố mới.Bao nhiêu lần std :: vector :: resize nên mặc định-xây dựng các yếu tố mới?
Vì đây là một vectơ uuid, trong đó hàm khởi tạo mặc định khởi tạo ngẫu nhiên mỗi thể hiện mới, chúng tôi kết thúc bằng N lần cùng uuid với GCC và N uuids khác nhau với VC. Đó là đủ để tàn phá trong bộ thử nghiệm của chúng tôi trên một nền tảng nhưng không phải là nền tảng khác, và không có gì thú vị để tìm thấy.
Câu hỏi của tôi là: ai đúng? VC hoặc GCC? Hay đây là một trong những góc yêu thích của C++ không được chỉ định? TIA, --DD
Tiêu chuẩn đã thay đổi. Dưới đây là một câu hỏi tương tự [std :: vector, xây dựng mặc định, C++ 11 và thay đổi phá vỡ] (http://stackoverflow.com/questions/5759232/stdvector-default-construction-c11-and-breaking-changes) –
Cần lưu ý rằng lớp học của bạn hơi "kỳ lạ": Về cơ bản, bạn có tình huống với 'T x; T y; 'bạn có' x! = Y'. Điều này đảm bảo rất nhiều sự chăm sóc, và tài liệu rõ ràng ... –
Ngẫu nhiên về xây dựng là một điều xấu, bạn có thể nhìn thấy nó trong ví dụ của bạn. Hầu hết mã giả định rằng tất cả các đối tượng được xây dựng mặc định đều bằng nhau. Để giải quyết những vấn đề này, bạn cần có một hàm ngẫu nhiên. Hoặc một nhà máy tạo ra các đối tượng ngẫu nhiên. – Dani