mem.hpp 937 B

1234567891011121314151617181920212223242526272829303132333435
  1. /*
  2. * 文件名: mem.h
  3. * 目标: 内存管理工具的头文件
  4. */
  5. #ifndef AFUN_MEM_HPP
  6. #define AFUN_MEM_HPP
  7. #include <cstdlib>
  8. #include "log.hpp"
  9. /* 取代calloc函数 */
  10. namespace aFuntool {
  11. static void *safeFree(void *&ptr) {if (ptr != nullptr) free(ptr); ptr = nullptr; return nullptr;}
  12. static void *safeCalloc(size_t n, size_t size){
  13. void *re = calloc(n, size);
  14. if (re == nullptr)
  15. fatalErrorLog(nullptr, EXIT_FAILURE, "The memory error");
  16. return re;
  17. }
  18. template <class T>
  19. static void *safeCalloc(size_t n, T &t){
  20. void *re = calloc(n, sizeof(decltype(*t))); // 自动推断类型
  21. if (re == nullptr)
  22. fatalErrorLog(nullptr, EXIT_FAILURE, "The memory error");
  23. return re;
  24. }
  25. }
  26. #define calloc(n, obj) (obj *)(aFuntool::safeCalloc(n, sizeof(obj)))
  27. #define calloc_size(n, size) (aFuntool::safeCalloc(n, size))
  28. #endif // AFUN_MEM_HPP