Tôi nhận thấy rằng trình cấp phát trong C++ cung cấp chuyên môn cho loại void. Có mục đích đặc biệt nào để làm điều này không? Nó không có ý nghĩa để cấp phát bộ nhớ cho loại void, phải không?Tại sao phân bổ trong c + + cung cấp chuyên môn cho loại void
Trả lời
Standard Librarian cột cũ này Matt Austern có một cuộc thảo luận khá kỹ lưỡng của allocators nói chung, trong đó có miếng ngon này:
Chúng ta làm gì về khoảng trống? Đôi khi một vùng chứa phải tham chiếu đến các dấu hiệu void và cơ chế rebind gần như cung cấp cho chúng tôi những gì chúng tôi cần, nhưng không hoàn toàn. Nó không hoạt động, bởi vì chúng ta sẽ cần phải viết một cái gì đó như malloc_allocator :: con trỏ, và chúng tôi đã xác định malloc_allocator theo cách mà instantiating nó cho void sẽ là bất hợp pháp. Nó sử dụng sizeof (T), và nó đề cập đến T &; không hợp pháp khi T vô hiệu. Giải pháp đơn giản như vấn đề: chuyên malloc_allocator cho khoảng trống, bỏ tất cả mọi thứ ngoại trừ mức tối thiểu tối thiểu mà chúng tôi cần để tham chiếu đến con trỏ void.
malloc_allocator là triển khai mẫu mà Austern sử dụng trong ví dụ của mình, nhưng nó đúng với trường hợp chung.
Trình phân bổ cần phải chuyên biệt cho void
vì bạn không thể tham chiếu đến void
.
Mặc dù vậy, sẽ không chỉ là một vấn đề nếu ai đó thực sự khởi tạo nó cho 'void'? – Owen
nơi phân bổ
- 1. Chuyên môn về mẫu cho nhiều loại
- 2. Tại sao không có chuyên môn :: shared_ptr <T[]>?
- 3. Loại chuyên môn tại thời điểm biên dịch
- 4. Chuyên môn không chuyên môn về mẫu lớp
- 5. Templates chuyên môn
- 6. Một mẫu chuyên môn cho nhiều lớp
- 7. Chức năng mẫu chuyên môn
- 8. C++ một phần phương pháp chuyên môn
- 9. Template chuyên môn hóa với phao là không loại
- 10. Tại sao không cần trình độ chuyên môn?
- 11. Doxygen cho C++ mẫu chuyên môn thành viên lớp mẫu
- 12. Tại sao phân bổ const trong vector?
- 13. Template phần chuyên môn hóa
- 14. C++ đơn mẫu chuyên môn với nhiều thông số mẫu
- 15. phương pháp Thêm vào mẫu chuyên môn
- 16. Lớp mẫu, chuyên môn hóa chức năng
- 17. Chuyên môn về giao diện chung của C#
- 18. C++ so với C++/CLI: trình độ chuyên môn Const chức năng ảo thông số
- 19. Xác định chuyên môn mẫu trong cpp?
- 20. Cách thực hiện chuyên môn mẫu trong C#
- 21. operator() mẫu chuyên môn
- 22. Tại sao loại phụ thuộc này không được tính là chuyên môn bằng cách sử dụng đối số mẫu?
- 23. Tại sao bộ phân bổ C++ STL này không phân bổ?
- 24. C++ 11: Template Function Chuyên cho Integer loại
- 25. Chuyên môn mẫu cho một dải giá trị
- 26. C++ lớp mẫu chuyên môn: tại sao phương pháp phổ biến cần phải được tái thực hiện
- 27. Chuyên môn mẫu lồng nhau
- 28. chuyên môn Explicit trong phạm vi không gian tên
- 29. Chuyên môn về mẫu C++ về các chức năng
- 30. C++ chuyên môn hóa lỗi phân biệt khi đi qua một mảng const
Nếu bạn thấy câu trả lời hữu ích, nó được coi là biểu mẫu tốt trên trang web này để Chấp nhận câu trả lời. – Gnawme