Thư viện thời gian chạy của Microsoft cung cấp phiên bản gỡ lỗi của chức năng phân bổ. Đối với C++ đây là một biến thể gỡ lỗi của nhà điều hành mới với chữ ký:Ghi đè mới bằng phiên bản gỡ lỗi mà không làm hỏng vị trí mới
void *operator new(size_t size, int blockType, const char *filename, int linenumber);
và macro được định nghĩa như
#define DEBUG_NEW new(_NORMAL_BLOCK, __FILE__, __LINE__)
Bây giờ để công cụ tất cả phân bổ, người ta thường định nghĩa
#if defined DEBUG_NEW
#define new DEBUG_NEW
#endif
Tuy nhiên, định nghĩa này phá vỡ bất kỳ vị trí nào sử dụng vị trí mới, bởi vì hai bộ đối số kết thúc là lỗi cú pháp. Bây giờ tôi có thể dễ dàng xử lý một số cách sử dụng trong mã của chúng tôi, nhưng thư viện chuẩn và tăng cường việc sử dụng vị trí mới trên khắp nơi. Vì vậy, việc xác định phương tiện toàn cầu này bao gồm rất nhiều thứ trước khi định nghĩa và làm chậm quá trình biên dịch. Vì vậy, sẽ có bất kỳ cách nào để phân bổ công cụ trong mã của chúng tôi mà không cần kéo vào tiêu đề chỉ vì chúng chứa vị trí mới và không phải đặt định nghĩa cuối cùng ở trên trong tất cả các tệp hoặc viết DEBUG_NEW theo cách thủ công?
Các tiêu đề được biên dịch trước sẽ thực sự là nỗi đau để duy trì trong tình huống của chúng tôi. Họ sẽ thực sự rất lớn và phức tạp do các vấn đề về tính di động khác nhau (codebase được biên dịch cho 4 nền tảng rất khác nhau). –
Theo cách nào thì khó có thể duy trì? Các pch nên thay đổi rất thường xuyên. –
Nếu nó bao gồm các công cụ tăng, nó sẽ thay đổi khá thường xuyên. Nhưng có lẽ tôi nên thử biên dịch trước chỉ tiêu đề gỡ lỗi bộ nhớ này (được tiêm với tùy chọn trình biên dịch '/ Fi'); vị trí mới xuất hiện ở những nơi ít hơn đáng kể. –