nanxing_new.h 1.3 KB

1234567891011121314151617181920212223242526272829303132333435
  1. #ifndef NANXING_NEW_H_
  2. #define NANXING_NEW_H_ 1
  3. #include<iostream>
  4. //这是一个基础类,GNU-STL中的new头文件里对new的各种重载的只有声明没有定义,
  5. //定义在C++运行时以及编译器中,这里只能定义一些可能需要的operator new的重载
  6. //这里主要是为了提供一些用于方便自定义operator的基础函数
  7. //只需要在外面封装上薄薄的一层operator外壳就即可
  8. namespace nanxing{
  9. //这一对函数来之于effective C++,同时参考了static的对初始化的判定(static使用额外的一个int来判定数据已经被成功初始化)
  10. //同样的这个new函数也会在前面附加一个char长度的空间,这个空间中将会用于判定是否已经被释放
  11. void* safe_new(size_t size)
  12. {
  13. char* data=(char*)malloc(size+1); //加上一个1位的额外空间作为标识符
  14. *data='{';
  15. data+=1;
  16. return static_cast<void*>(data);
  17. }
  18. void safe_delete(void* data,size_t)
  19. {
  20. char * middle=static_cast<char*>(data);
  21. middle-=1;
  22. if(*middle=='{')
  23. {
  24. *middle='\n';
  25. free(static_cast<void*>(middle));
  26. }
  27. else{
  28. std::cerr<<"The space has not been free"<<std::endl;
  29. }
  30. }
  31. }
  32. #endif