mem.hpp 972 B

12345678910111213141516171819202122232425262728293031323334353637
  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. template <typename T>
  12. static void *safeFree(T *&ptr) {if (ptr != nullptr) free((void *)ptr); ptr = nullptr; return nullptr;}
  13. static void *safeCalloc(size_t n, size_t size){
  14. void *re = calloc(n, size);
  15. if (re == nullptr)
  16. fatalErrorLog(nullptr, EXIT_FAILURE, "The memory error");
  17. return re;
  18. }
  19. template <typename T>
  20. static void *safeCalloc(size_t n, T &t){
  21. void *re = calloc(n, sizeof(decltype(*t))); // 自动推断类型
  22. if (re == nullptr)
  23. fatalErrorLog(nullptr, EXIT_FAILURE, "The memory error");
  24. return re;
  25. }
  26. }
  27. #define calloc(n, obj) (obj *)(aFuntool::safeCalloc(n, sizeof(obj)))
  28. #define calloc_size(n, size) (aFuntool::safeCalloc(n, size))
  29. #endif // AFUN_MEM_HPP