Chuẩn C++ làm cho quy định cho trọng ::operator new
. Trong khi việc thực hiện chắc chắn là lộn xộn và liên quan đến liên kết, một chương trình C++ chỉ có thể xác định một khác nhau ::operator new
và nó hoạt động. Tiêu chuẩn C++ cho biết rõ ràng: Các chương trình có thể thay thế chúng bằng các định nghĩa của riêng chúng (v.v. các giới hạn và chi tiết khác nhau).
malloc
mặt khác là một hàm bình thường được xác định trong thư viện thông thường và C (và C++, cho vấn đề đó) không có cơ sở để thay thế một hàm như thế. Bạn có thể thuyết phục hầu hết các mối liên kết dưới ánh mặt trời để liên kết đến libc
bạn sans malloc
và giải quyết các tài liệu tham khảo để malloc
đến một số mã từ một tập tin thư viện/đối tượng. Nhưng bạn không thể chỉ xác định một khác nhau malloc
chức năng vì đó là vi phạm nguyên tắc một nét: Bạn kết thúc với hai chức năng gọi là "malloc" trong chương trình, đó là cả hai bị cấm bởi tiêu chuẩn (đối với phi static
, không ẩn danh - namespace
, phi inline
... chức năng) và một vấn đề nghiêm trọng đối với linkers (rất có thể, một lỗi hoặc một trong hai định nghĩa được giảm).
Lý do mà bạn có thể chuyển tiếp tuyên bố nếu bạn chỉ có một con trỏ, nhưng cần một đầy đủ bao gồm nếu bạn có một thể hiện của một đối tượng. http://stackoverflow.com/questions/553682/when-can-i-use-a-forward-declaration?rq=1 – CoryKramer
Câu lệnh từ câu trả lời được liên kết cho biết '3. mới có khái niệm về một new_handler, mà không có tương đương malloc.'. IMHO không đúng 100%. Thường có một số ký hiệu yếu được khai báo trong thư viện c không có sẵn, có thể được _overridden_ với các triển khai của riêng bạn (xem ví dụ: ['_sbrk'] (http://en.wikipedia.org/wiki/Sbrk)). Các ký hiệu yếu được khai báo không nhất thiết liên quan đến _Knowdlege của trình liên kết_. –