7.C++核心实践项目总结

  1. 7.总结
    1. 7.1 知识点
      1. 主要学习内容
      2. 总结目的
      3. 完成需求有千百种方式
      4. 练习
    2. 7.2 核心要点速览
      1. 构造函数知识补充
      2. 不卡死控制台的输入检测
      3. 关于delete的使用

7.总结


7.1 知识点

主要学习内容

总结目的

完成需求有千百种方式

练习


7.2 核心要点速览

构造函数知识补充

核心要点 说明 示例/注意事项
默认构造函数 自定义类作为成员变量时,需保证其存在默认构造函数(除非在初始化列表显式初始化) class A { B b; }; // B 需有无参构造,否则报错
A a; // 自动调用 B::B()
初始化列表 自定义类成员变量应在构造函数初始化列表中初始化,而非构造函数体内 class A { B b; };
A::A() : b(100) {} // 正确,调用 B::B(int)
A::A() { b = B(100); } // 错误,先调用 B::B() 再赋值,产生临时对象
指针成员 自定义类的指针成员无需默认构造(指针仅存储地址,不自动创建对象) class A { B* b; }; // 合法,b 为随机地址(需手动初始化)
数组初始化 自定义类数组默认调用无参构造,若无则报错;指针数组无此限制 C arr[5]; // 调用 C::C() 5次
C* parr[5]; // 合法,parr 元素为随机地址

不卡死控制台的输入检测

核心要点 函数 作用 使用示例
非阻塞输入 _kbhit() 检测是否有键盘输入,有输入返回1,否则返回0 if (_kbhit()) { … }
获取输入 _getch() 获取键盘输入字符,不显示在控制台,无需按回车 int key = _getch();
配合使用 —— 避免_getch()阻塞程序,实现非阻塞输入检测 while (true) {
if (_kbhit()) {
int key = _getch();
// 处理按键逻辑
}
// 其他逻辑执行
}

关于delete的使用

核心要点 场景 释放方式 示例/注意事项
单个对象 new分配的单个对象 delete 指针; MyClass* obj = new MyClass();
delete obj; obj = nullptr;
连续数组 new[]分配的连续对象数组 delete[] 数组指针; MyClass* arr = new MyClass[5];
delete[] arr; arr = nullptr;
栈上指针数组 栈上存储的指针(指向堆上对象) 遍历释放每个指针指向的对象,数组本身自动释放 MyClass* arr2[5];
for (int i=0; i<5; i++) { delete arr2[i]; arr2[i]=nullptr; }
// 栈数组 arr2 自动释放
堆上指针数组 new[]分配的指针数组(指向堆上对象) 先释放每个指针指向的对象,再释放指针数组本身 MyClass** arr3 = new MyClass*[5];
for (int i=0; i<5; i++) { delete arr3[i]; arr3[i]=nullptr; }
delete[] arr3; arr3=nullptr;
核心原则 —— 1. deletenew配对,delete[]new[]配对
2. 先释放对象,再释放指针数组
避免内存泄漏和野指针,释放后将指针置为nullptr


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏