定制new和delete:C++异常处理与内存管理

需积分: 9 2 下载量 4 浏览量 更新于2024-08-19 收藏 261KB PPT 举报
本读书笔记主要围绕《定制new和delete-effective C++》的第八章内容展开,讲述了C++中的内存管理机制以及如何通过自定义错误处理函数来处理内存分配失败的情况。章节的核心知识点包括: 1. **理解new-handler的行为**: 当`operator new`无法满足内存分配需求时,它不会立即抛出异常,而是会先调用用户设置的`new_handler`函数,这个函数由`std::set_new_handler`函数设置。例如,这里提到的`OutOfMem`函数就是一种示例new-handler,它用于输出错误消息并调用`std::abort()`来终止程序。 2. **内存分配错误处理**: 客户端需要通过`std::set_new_handler`设置新的错误处理策略,确保在内存不足时能采取适当的措施。在`main`函数中,通过设置`OutOfMem`作为new-handler,程序将在内存分配失败时执行相应的错误处理。 3. **STL和TR1**: - STL(Standard Template Library)是C++标准库的一部分,提供了诸如容器、迭代器和算法等功能,对高效编程至关重要。 - TR1(Technical Report 1)是C++标准库的一个扩展,引入了许多新特性,这些新功能被封装在`std::tr1`命名空间中。 4. **Boost**: Boost是一个知名的C++库组织和网站,提供了一系列扩展功能和工具,包括一些高级编程技术和库。 5. **编程实践与风格**: - 推荐使用`const`、`enum`和`inline`代替`#define`,因为`#define`可能导致问题,如不进入符号表,且不利于类型安全和代码可读性。 - `const`在C++中用于表示常量,如常量指针(constant pointers),在处理字符串时推荐使用`std::string`而不是`const char*`。 6. **C++语言特性**: - C++作为一个语言集合,包含C的基础特性(如区块、预处理器等),以及面向对象(OOP)、模板编程(Template C++)和STL等现代编程范式。 综上,本读书笔记着重探讨了C++内存管理的高级技巧,特别是如何利用自定义new-handler来增强程序的健壮性和内存效率,同时也强调了STL、TR1和Boost在C++高效编程中的重要性,以及编程风格的最佳实践。通过学习这些内容,读者可以更好地掌握C++的内存管理,并提高代码质量。