Thay vì xác định mới là điều gì đó khác biệt, tại sao không phải là toán tử quá tải mới?
Thêm những định nghĩa chức năng ở đâu đó trong không gian tên toàn cầu:
// operator new overloads
void* operator new(const size_t size, const char* file, int line) throw();
void* operator new(const size_t size, const size_t align, const char* file, int line) throw();
void* operator new[](const size_t size, const char* file, int line) throw();
void* operator new[](const size_t size, const size_t align, const char* file, int line) throw();
// can't easily overload operator delete
void operator delete(void* ptr) throw();
void operator delete[](void* ptr) throw();
// matched to the operator new overload above in case of exceptions thrown during allocation
void operator delete(void* ptr, const char* file, int line) throw();
void operator delete[](void* ptr, const char* file, int line) throw();
void operator delete(void* ptr, const size_t align, const char* file, int line) throw();
void operator delete[](void* ptr, const size_t align, const char* file, int line) throw();
// global new/delete
void* operator new(size_t size) throw();
void* operator new(size_t size, const std::nothrow_t&) throw();
void* operator new(size_t size, size_t align) throw();
void* operator new(size_t size, size_t align, const std::nothrow_t&) throw();
void* operator new[](size_t size) throw();
void* operator new[](size_t size, const std::nothrow_t&) throw();
void operator delete(void* ptr, const std::nothrow_t&) throw();
void operator delete[](void* ptr, const std::nothrow_t&) throw();
Sau đó, bạn có thể định nghĩa của riêng bạn macro mới trong đó kêu gọi thông qua các phiên bản phi toàn cầu và thực hiện các phiên bản toàn cầu để khẳng định hoặc cảnh báo nếu họ gọi lại (để bắt bất cứ điều gì trượt qua).
#define MY_NEW(s) new(s, __FILE__, __LINE__)
Quá tải cấp lớp của bạn sẽ hoạt động như mong đợi nếu bạn gọi 'mới' trực tiếp trên lớp học. Nếu bạn muốn gọi MY_NEW trên lớp, bạn có thể nhưng bạn sẽ phải xác định lại tình trạng quá tải trong lớp để phù hợp với lớp mới của bạn.
Đó là vấn đề với macro: ( – GManNickG
Nếu bạn không sử dụng cửa sổ, tôi xin đề nghị valgrind – LiraNuna
Tôi muốn sử dụng DUMA nếu tôi đang sử dụng Windows. – EFraim