1,写自己的operator new时,函数的行为与缺省的new保持一致性.
(1)内存不足时,会调用一个new-handler.
(2)应对new(0)的情况.
(3)避免遮盖"正常"形式的new.
2,C++标准要求:即使用户要求一个0 bytes内存,operator new也应该传回一个合法指针.
注:每个class都有非零大小.
#include <iostream>
using namespace std ;
class X
{
};
int main ()
{
cout<<sizeof(X)<<endl; //输出1
return 0 ;
}
3,如果配置不成功,operator new会一再尝试配置内存,调用错误处理函数.
只有当错误处理函数的指针是null时,operator new才会抛出一个exception.
一个默认operator new的伪代码:
void* operator new(size_t size)
{
if(size==0)
size=1;
while(true) //死循环
{
attempt to allocate size memory;
if(successful)
return(a pointer to the memory);
//不成功,调用错误处理函数 抛出异常或abort()跳出循环
//得到错误处理函数
new_handler globalHander =set_new_handler(0);
set_new_handler(globalHander);
if(globalHander)
(*globalHander)();
else
throw std::bad_alloc();
}
}
4,
non-member operator delete的伪码:
void operator delete(void* rawMemory)
{
if(rawMemory==0) return;//删除NULL指针,什么也不做.
Deallocate the memory pointed to by rawMemory.
return;
}
member operator delete的伪码:
void Base::operator delete(void* rawMemory,size_t size)
{
if(rawMemory==0) return;//删除NULL指针,什么也不做.
if(size!=sizeof(Base))
{
::operator delete(rawMemory); //令标准版delete处理
return;
}
Deallocate the memory pointed to by rawMemory.
return;
}
分享到:
相关推荐
条款8: 写operator new和operator delete时要遵循常规 条款9: 避免隐藏标准形式的new 条款10: 如果写了operator new就要同时写operator delete 第三章 构造函数,析构函数和赋值操作符 条款11: 为需要动态分配内存的...
new操作符(new operator)和operator new的区别,会很有帮助
条款8:写OPERATOR NEW与OPERATOR DELETE要遵循常规 条款9:避免隐藏标准形式的NEW 条款10:如果写了OPERATOR NEW就要同时写OPERATOR DELETE 条款11:为需要动态分配内存的类声明一个拷贝构造函数和一个赋值函数 条款12:...
006_OSQP: An Operator Splitting Solver forQuadratic Programs osqp原理推到及实现文档
cpp代码-只能创建栈对象 做法:将operator new/delete设置为私有的
拨开自定义operator new与operator delete的迷雾
错误:unexpected operator.docx
条款7: 当使用new得指针的容器时,切记在容器销毁前delete那些指针 条款8: 千万不要把auto_ptr放入容器中 条款9: 小心选择删除选项 条款10: 当心allocator的协定和约束 条款11: 了解自定义allocator的正统使用法...
条款7: 当使用new得指针的容器时,切记在容器销毁前delete那些指针 条款8: 千万不要把auto_ptr放入容器中 条款9: 小心选择删除选项 条款10: 当心allocator的协定和约束 条款11: 了解自定义allocator的正统使用法...
条款7:当使用new得指针的容器时,记得在销毁容器前delete那些指针 条款8:永不建立auto_ptr的容器 条款9:在删除选项中仔细选择 条款10:注意分配器的协定和约束 条款11:理解自定义分配器的正确用法 条款12...
void * operator new[ ](size_t size); void operator delete[ ](void *p); // .. other members here .. }; void *TestClass::operator new[ ](size_t size) { void *p = malloc(size); return (p); } void Test...
条款16:成对使用new和delete时要采取相同形式 use the same form in corresponding uses of new and delete. 条款17:以独立语句将newed对象置入智能指针 store newed objects in smart pointers in standalone ...
new operator/delete operator就是new和delete操作符,而operator new/operator delete是函数。 new operator(1)调用operator new分配足够的空间,并调用相关对象的构造函数(2)不可以被重载 operator new(1)只...
记得在销毁容器前delete那些指针 条款8:永不建立auto_ptr的容器 条款9:在删除选项中仔细选择 条款10:注意分配器的协定和约束 条款11:理解自定义分配器的正确用法 条款12:对STL容器线程安全性的...
主要介绍了shell脚本报错:"[: =: unary operator expected"解决办法的相关资料,需要的朋友可以参考下
27 聪明的微创新:Operator工作原理解读.pdf
内容简介: 有人说C++程序员可以分成两类,读过Effective C++的和没读过的。世界顶级C++大师Scott Meyers成名之作的第三版的确当得起这样的评价...8.定制new和delete 9.杂项讨论 A 本书之外 B 新旧版条款对映 索引
解决error LNK2005 void __cdecl operator delete(void