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