关于智能指针和抽象基类的 new 总结

问题描述

在最初编写 Person 类时,我发现为了实现多态,personVec(用于统一管理 Person 对象)应该存储的是指针。然而,问题随之而来:如何管理这些指针的内存?因为我习惯于“谁申请,谁释放”的内存管理方式,而此处的指针是外部传进来的。


图片1
图片1
图片1
图片1
![图片1](https://cdn-a.markji.com/files/6722fb9858683e065ff1cf18_hd.png?e=1737643978020&token=xX63b9jqTlDOcGmctt5K9254rV0LG8hS9BmDeFBy:MrTGKOeuNYNd13PvUj_Ad7hu74A=用

为了简化内存管理,我决定统一使用智能指针来管理 Person 对象。通过将裸指针隐藏在智能指针中,我确保了内存的自动管理,并避免了手动释放的繁琐与错误。


遇到的问题与思考

在实现过程中,我遇到了一些挑战,特别是在派生类的构造过程中。最初,我认为通过解引用智能指针就能得到 Person 类的对象,但实际上这个过程中出现了问题。原因在于,派生类并没有接受 Person 类的构造函数,导致了类型不匹配。

为了解决这个问题,我花了相当长时间去思考,最终才意识到需要正确地使用 new 来确保派生类对象的正确构造,并且必须显式调用派生类的构造函数。


二更:调试技巧

有一个调试技巧我发现非常有帮助:通过查看调试器中的紫色区域,它会明确列出每个参数的类型。这有助于快速定位问题,特别是在类型匹配方面。
图片1
图片1
图片1

小结

通过这次的实现,我更加深入地理解了智能指针和抽象基类的内存管理问题。智能指针确实能简化内存管理,但在多态和派生类的构造过程中,需要特别注意如何正确使用构造函数来避免潜在的内存错误。

图片1