当前位置: 首页 > news >正文

常用函数的使用错题汇总

目录

  • new/delete malloc/free
      • 1. 语言和类型
      • 2. 内存分配
      • 3. 内存释放
      • 4. 安全性和类型安全
      • 5. 其他特性
      • 总结
  • 线程停止
  • 文件流

new/delete malloc/free

在这里插入图片描述
在这里插入图片描述
malloc/freenew/delete 是 C/C++ 中用于动态内存管理的两种方式,它们有一些重要的区别。以下是这两种方式的比较:

1. 语言和类型

  • malloc/free:

    • 属于 C 语言的内存管理函数。
    • malloc 返回的是 void* 类型的指针,调用者需要进行类型转换。
    • 不会调用构造函数或析构函数,适用于简单的内存分配。
  • new/delete:

    • 属于 C++ 的内存管理操作符。
    • new 返回的是所请求类型的指针,不需要进行类型转换。
    • 会自动调用构造函数(new)和析构函数(delete),适用于复杂的对象和类。

2. 内存分配

  • malloc:

    • 语法:void* malloc(size_t size);
    • 分配 size 字节的内存块。
    • 如果分配失败,返回 NULL
  • new:

    • 语法:Type* ptr = new Type;
    • 分配足够的内存来存储一个 Type 类型的对象,并调用其构造函数。
    • 如果分配失败,抛出 std::bad_alloc 异常。

3. 内存释放

  • free:

    • 语法:void free(void* ptr);
    • 释放由 malloccallocrealloc 分配的内存。
    • 不会调用析构函数。
  • delete:

    • 语法:delete ptr;
    • 释放由 new 分配的内存,并调用相应对象的析构函数。
    • 可以使用 delete[] 来释放由 new[] 分配的数组。

4. 安全性和类型安全

  • 类型安全

    • newdelete 是类型安全的,编译器会根据类型检查指针的类型。
    • mallocfree 不提供类型安全,使用时需要手动转换类型。
  • 内存泄漏

    • 使用 newdelete 更容易避免内存泄漏,因为它们会自动调用对象的构造和析构函数,确保资源的正确管理。
    • 使用 mallocfree,开发者需要手动管理对象的生命周期,容易出现内存泄漏。

5. 其他特性

  • mallocfree 不能用于分配和释放 C++ 对象的数组,使用时不调用构造函数和析构函数,可能导致资源管理不当。
  • newdelete 可以配合异常处理机制,允许在分配失败时抛出异常,提供了更好的错误处理模型。

总结

  • 在 C++ 中,推荐使用 newdelete 来进行动态内存管理,以充分利用对象的构造和析构功能以及类型安全的优势。
  • mallocfree 适用于 C 语言或需要与 C 兼容的代码,但在 C++ 中使用时要谨慎,确保适当地管理对象的生命周期。

线程停止

在这里插入图片描述

文件流

在这里插入图片描述

#include <iostream>
#include <fstream>
#include <string>int main() {std::ifstream fin("example.txt"); // 创建 ifstream 对象并打开文件// 检查文件是否成功打开if (!fin) {std::cerr << "Error opening file!" << std::endl;return 1; // 返回错误代码}std::string line;// 逐行读取文件内容while (std::getline(fin, line)) {std::cout << line << std::endl; // 输出读取的每一行}fin.close(); // 关闭文件return 0; // 正常结束程序
}

文件输入输出流


http://www.mrgr.cn/news/78712.html

相关文章:

  • 高等数学学习笔记 ☞ 导数的基础知识
  • 起重机检测数据集VOC+YOLO格式2316张1类别
  • matlab离线安装硬件支持包
  • mac 使用zip2john破解zip压缩包密码
  • RP2K:一个面向细粒度图像的大规模零售商品数据集
  • 【面试】后端开发面试中常见数据结构及应用场景、原理总结
  • Qt入门5——常用控件3
  • 第七课 Unity编辑器创建的资源优化_UI篇(UGUI)
  • Java八股文(11-29start)
  • MySQL源码编译
  • baomidou Mabatis plus引入异常
  • 【设计模式系列】解释器模式(十七)
  • 关于使用注册表修改键盘的键位映射
  • 阿里云服务器(centos7.6)部署前后端分离项目
  • 六:安装服务-compute node
  • 1-1 Gerrit实用指南
  • 【LeetCode刷题之路】120:三角形最小路径和的两种解法(动态规划优化)
  • 初识ProtoBuf以及环境搭建(Win和Ubuntu)
  • NGO-CNN-BiGRU-Attention北方苍鹰算法优化卷积双向门控循环单元时间序列预测,含优化前后对比
  • 你能穿过迷雾看清一切吗
  • uni-app 使用笔记
  • 【Oracle】个人收集整理的Oracle常用SQL及命令
  • BUGKU printf
  • otter 扩展
  • Ubuntu 24.04使用docker安装Node-Red
  • 【Ant Design Pro】1. config 配置