2011-08-22 26 views
9

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

+0

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

Trả lời

7

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.

1

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.

+0

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

+1

nơi phân bổ được sử dụng? bạn có thể cho tôi một ví dụ? –

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