面向对象编程:以ina226为例重写栈与堆管理

需积分: 32 53 下载量 13 浏览量 更新于2024-08-10 收藏 13.93MB PDF 举报
"在《Thinking in C++中文版》中,第12章探讨了如何重新设计前面关于栈(stack)和堆(heap)管理的示例,特别是针对`std::stack`和`std::stack`的`new`和`delete`操作。章节指出,由于`std::stack`和`std::stack`使用`void*`指针,它们本身并不持有它们指向的对象的所有权,当它们超出作用域时,不会自动调用析构函数删除内存。这种设计使得将它们设计成普通类变得困难,因为`delete`一个`void*`只会简单地释放内存,而无法指定析构函数。 作者强调了使用堆内存的重要性,因为`delete`操作只适用于堆上分配的内存。因此,当在`std::stack`或`std::stack`上添加指向栈上或堆上对象的指针时,必须特别小心,因为直接使用`delete`可能导致错误。为了确保安全,作者建议避免在堆以外的地方创建`std::string`对象,并在接下来的章节中详细讨论了如何通过确保指针正确映射类型来解决这个问题。 12.2.1节的核心内容是演示如何仅从堆中创建`std::string`类,通过控制内存分配和释放,以及确保在使用指针之前进行类型转换。这一过程旨在提升代码的可读性和安全性,同时巩固对C++内存管理和面向对象概念的理解。 在本章中,读者将学到如何在实际开发中应用面向对象的设计原则,特别是与内存管理和抽象数据类型(Abstract Data Types,ADT)相关的技巧。通过重新设计示例,作者希望帮助读者复习和深化对C++语言中构造、析构函数、指针生命周期以及所有权管理的理解。同时,这也展示了C++作为一种面向对象编程语言如何在实际问题中体现其优势和灵活性。"