C++ 11 cung cấp lớp std::allocator_traits
là cách tiêu chuẩn để sử dụng các trình phân bổ. Hàm tĩnh std::allocator_traits::construct()
lấy một con trỏ đến nơi đối tượng sẽ được tạo. Tuy nhiên, hàm std::allocator_traits::allocate()
tĩnh trả về giá trị allocator::pointer
, chỉ có hành vi giống như một con trỏ nhưng không nhất thiết phải là một con trỏ (nói chung, mặc dù std::allocator::pointer
được yêu cầu làm con trỏ).allocator_traits :: construct() vs allocator_traits :: allocate()
Làm cách nào để sử dụng phân bổ và xây dựng các phương pháp tĩnh nếu, nói chung, chúng sẽ hoạt động với các loại không tương thích? Chúng có thể được sử dụng chỉ khi loại pointer
thực sự có thể chuyển đổi thành con trỏ đơn giản bình thường không?
+1 Đây là một câu hỏi đặc biệt sâu sắc tại thời điểm này. Có rất ít lập trình viên C++ khám phá những vùng biển này. Người triển khai phải. Điều này dẫn tôi đến đặt câu hỏi: Bạn có phải là std :: lib implementor không? –
@HowardHinnant: Cảm ơn! Câu hỏi được kết nối với thiết kế của một lớp vectơ nhỏ với một vài chuông và còi trên '' std :: vector'' (ví dụ, tự động sử dụng bộ nhớ tĩnh lên đến một vài phần tử, hỗ trợ cho SSE và các hướng dẫn vector khác , v.v.) Chỉ muốn cố gắng làm những điều theo cách "thích hợp" đối với hỗ trợ cấp phát. – bluescarni