2010-01-18 29 views
17

Tiêu chuẩn ISO C++ có bắt buộc bất kỳ loại thứ tự hủy diệt nào của các đối tượng bên trong các thùng chứa STL không?STL container yếu tố hủy đơn đặt hàng

  • đang std::list/std::vector/std::map yếu tố phá hủy bắt đầu từ đầu hoặc kết thúc container?
  • Tôi có thể dựa vào std::map lưu trữ các phần tử của nó trong nội bộ std::pair s sao cho khóa trong cặp bị hủy trước giá trị của nó (hoặc ngược lại) không?

Trả lời

18
  1. Không được chỉ định trong tiêu chuẩn.
  2. Có, nhưng điều này có nghĩa là khóa bị hủy sau giá trị được liên kết của nó.
+0

+1 ............ :) –

+0

# 2, vâng, đó là ý tôi, nên viết cách khác xung quanh. Bạn có thể chỉ cho tôi một phần của tiêu chuẩn chỉ định # 2 không? –

+0

20.2.2/1, và điều này gắn liền với những nhận xét của tôi về câu trả lời của Terry. –

4
  1. Unspecified
  2. Vâng, bạn có thể phụ thuộc vào std :: bản đồ lưu trữ đó là các yếu tố trong std :: cặp, nhưng tôi không thấy bất cứ điều gì trong đó nêu rõ các phần chính của một std :: cặp là bị hủy trước phần Giá trị.
+2

Nhiệm vụ chuẩn * đầu tiên * và * giây * dữ liệu thành viên và hiển thị chúng theo thứ tự đó, nếu cần, cũng xác định trật tự xây dựng và hủy. –

+0

Tôi không thể tìm thấy bất cứ điều gì mà nói rõ ràng rằng thứ tự là bắt buộc, nhưng cũng không có gì nói rằng nó được phép khác nhau. Vì họ là thành viên công cộng và chắc chắn không được đánh dấu là "chỉ giải trình", không có điều khoản nào khác cho phép thực hiện quá trình triển khai. Vì vậy, tôi sẽ phải rơi vào mặt đó là thứ tự được yêu cầu. –

+0

Nhìn vào dự thảo tiêu chuẩn C++ 0x, nó xuất hiện rằng tiêu chuẩn bắt buộc rằng * đầu tiên * được xây dựng trước * giây *. Cụ thể, 20.3.3.4 'cặp(); Hiệu ứng: Khởi tạo các thành viên của nó như được thực hiện: pair(): \t đầu tiên(), thứ hai() {} 'Tôi đọc điều đó có nghĩa là thứ tự được xác định, nhưng tôi sẽ trì hoãn luật sư ngôn ngữ. –

Các vấn đề liên quan