set_new_handler(0)的作用是什么?能否详细解释一下?
- 内容介绍
- 文章标签
- 相关推荐
本文共计854个文字,预计阅读时间需要4分钟。
目录源代码解释总结出自《STL源码剖析》第45页中,有一行代码set_new_handler(0);以及以下源代码:
cppinline T* _allocate(ptrdiff_t size, T* (*construct)()) { set_new_handler(0); T* tmp=(T*)operator new((size_t)(size * sizeof(T)));}
解释
1.`set_new_handler(0)`:这行代码用于设置新的内存分配失败时的处理函数。参数0表示不设置任何处理函数,即当内存分配失败时,程序将直接抛出异常。
2. `_allocate`函数:这是一个内联函数,用于分配内存并调用构造函数。它接受两个参数:`size`表示需要分配的内存大小,`construct`是一个函数指针,指向构造函数。
3. `operator new((size_t)(size * sizeof(T)))`:这是C++标准库中用于动态分配内存的函数。这里使用了placement new,它允许我们在已分配的内存块中调用构造函数。
总结
本文共计854个文字,预计阅读时间需要4分钟。
目录源代码解释总结出自《STL源码剖析》第45页中,有一行代码set_new_handler(0);以及以下源代码:
cppinline T* _allocate(ptrdiff_t size, T* (*construct)()) { set_new_handler(0); T* tmp=(T*)operator new((size_t)(size * sizeof(T)));}
解释
1.`set_new_handler(0)`:这行代码用于设置新的内存分配失败时的处理函数。参数0表示不设置任何处理函数,即当内存分配失败时,程序将直接抛出异常。
2. `_allocate`函数:这是一个内联函数,用于分配内存并调用构造函数。它接受两个参数:`size`表示需要分配的内存大小,`construct`是一个函数指针,指向构造函数。
3. `operator new((size_t)(size * sizeof(T)))`:这是C++标准库中用于动态分配内存的函数。这里使用了placement new,它允许我们在已分配的内存块中调用构造函数。
总结

