1234567891011121314151617181920212223242526272829303132333435 |
- #ifndef NANXING_NEW_H_
- #define NANXING_NEW_H_ 1
- #include<iostream>
- //这是一个基础类,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<void*>(data);
- }
- void safe_delete(void* data,size_t)
- {
- char * middle=static_cast<char*>(data);
- middle-=1;
- if(*middle=='{')
- {
- *middle='\n';
- free(static_cast<void*>(middle));
- }
- else{
- std::cerr<<"The space has not been free"<<std::endl;
- }
- }
- }
- #endif
|