2013-05-16 17 views
5

Theo C++ 03 Standard, 5.3.4/10Mục đích của yêu cầu C++ Standard là gì char mới [] tạo ra bộ nhớ phù hợp?

Đối với mảng của char và unsigned char, phần chênh lệch giữa kết quả của sự mới thể hiện và địa chỉ trả về bởi hàm phân bổ trách nhiệm là một bội số nguyên của yêu cầu căn chỉnh chặt chẽ nhất (3.9) của bất kỳ loại đối tượng nào có kích thước không lớn hơn kích thước của mảng được tạo.

Chức năng phân bổ (operator new[]()) cũng được yêu cầu cấp phát bộ nhớ phù hợp cho mọi loại có thể. Vì vậy, phần được trích dẫn có hiệu quả nói rằng new char[sizeof(T)] nên mang lại bộ nhớ phù hợp với loại T.

Mục đích của yêu cầu này là gì? Tôi chỉ có thể gọi operator new() (hoặc operator new[]()) được đảm bảo để trả lại bộ nhớ phù hợp đúng cách và có bộ nhớ phù hợp. Ý tôi là dù sao thì new char[] sẽ gọi số operator new()[] vì vậy tôi có thể tự gọi nó là chính mình.

Mục đích của yêu cầu được trích dẫn là gì? Tại sao không chỉ gọi trực tiếp số operator new[]()?

Trả lời

3

Tôi thường chỉ gọi trực tiếp operator new, nhưng các tác giả của tiêu chuẩn đã quyết định cũng cho phép sử dụng new char[] làm phương tiện thu thập bộ nhớ thô. Do đó yêu cầu căn chỉnh.

+0

Phiên bản đầu của C++ có cho phép các cách phân bổ bộ nhớ thô khác không? Điều này có thể là khả năng tương thích ngược. – Barmar

+0

@Barmar Theo như tôi biết, có. Ít nhất, 'new char []' làm việc với tất cả các trình biên dịch ban đầu (CFront, Zortech và g ++); cho dù nó được đảm bảo hay không, tôi không biết. –

+0

Đó là những gì tôi đang nói - 'new char []' luôn hoạt động, nhưng những cách khác để cấp phát bộ nhớ thô có thể không có, vì vậy đây là cách mọi người ban đầu đã làm nó. – Barmar

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