
简介
该用户还未填写简介
擅长的技术栈
可提供的服务
暂无可提供的服务
然后解引用d并赋值为0(*d=0),这是安全的,因为d指向有效的内存。直接解引用未初始化的指针(*b=0)会导致未定义行为(如段错误),这是危险的。4.定义一个int*d=new int,让*d=0;5.定义一个int*e=new int,让e=&a;4.定义一个int*d=new int,让*d=0;5.定义一个int*e=new int,让e=&a;2.定义一个int*b,让*b=0;3.定义
本节我们来深入、全面地探讨现代C++中智能指针的功能、用法、细节和陷阱。智能指针是C++11及以后版本中最重要的特性之一,它旨在通过自动化资源管理来彻底解决裸指针带来的内存泄漏、悬空指针等问题。
这是最常见的情况,函数内部需要的临时对象、计数器、返回值等,都应该优先在栈上创建。代码简单、安全、高效。对象生命周期与当前作用域一致时,也就是这个对象只在当前代码块内有用,那么直接定义是最佳选择。
规则: 如果一个类打算被用作基类(即会被其他类继承),并且会通过基类指针来删除派生类对象,那么它的析构函数必须是 virtual。为什么:如果析构函数不是虚的,当我们delete 一个指向派生类对象的基类指针时,只会调用基类的析构函数,而不会调用派生类的析构函数。这会导致派生类部分的资源泄漏。public:} // 非虚析构函数 - 大问题!public:// 基类指针指向派生类对象delete
1.头文件中尽量使用前向声明,可以定义指针/引用成员,也可以用来声明函数参数、返回类型2.实现文件中使用#include,仅在.cpp文件中包含需要的头文件,避免头文件包含头文件的链式依赖3.谨慎使用友元,只在确实需要访问私有成员时使用,考虑是否可以通过公共接口替代4.依赖管理原则,最小化头文件依赖,使用接口类抽象实现。
编译依赖指的是源文件之间的依赖关系,当某个文件发生变化时,需要重新编译哪些其他文件。依赖关系越复杂、越深,编译系统需要做的工作就越多,编译时间就越长。头文件中的宏定义被修改时,所有包含该头文件的文件都需要重新编译。
首选上下文对象:最灵活且类型安全考虑依赖注入:适合大型、需要测试的项目谨慎使用单例:可能导致测试困难和全局状态问题线程局部存储:适合Web服务器等请求-响应模型明确文档:无论选择哪种方法,都要清晰文档化数据流根据项目的规模、复杂度和团队偏好选择合适的方案。上下文对象通常是最平衡的选择。
核心思想:将数据(属性)和操作数据的方法(函数)捆绑在一起,并隐藏对象的内部实现细节。对象只对外提供一个可控的访问接口。好处:1.提高安全性:防止外部代码随意修改内部数据,只能通过你提供的方法来修改,你可以在方法中添加验证逻辑。2.降低复杂度:使用者无需关心内部实现,只需关注接口。3.易于维护:内部实现可以自由更改,只要对外接口不变,就不会影响其他代码。
auto关键字是现代C++编程中的重要特性,可以:简化代码,减少冗余类型名称提高代码的通用性和维护性避免隐式类型转换错误。







