c++ - gnu c++如何实现new和delete

标签 c++ new-operator delete-operator

我只看到 libstdc++-v3 中的一些声明,但找不到定义。 newdelete 是否只是封装了 mallocfree ?在哪里可以找到 newdelete 的定义?为什么我找不到 bits/c++allocator.h 包含在 bits/allocator.h 中? gcc 中有很多奇怪的东西。

最佳答案

尽管 C++ 规范指出开发人员应避免使用旧的 malloc/free 方式分配内存,但 C++ 语言本身对内存分配无能为力。 new/delete 的行为类似于具有 C++ 类型安全功能的 malloc/free 的包装器,并在 malloc 返回 NULL 时抛出预期。这就是为什么“new”从不返回 NULL 而是期望。他们为您完成这项工作。

C++ 使用诸如 glibc、libc 之类的 C 例程进行系统级操作。在 Linux 中,“实际”分配内存的唯一方法是调用 brk() 和 mmap()。所有语言包括Java和Python调用malloc()或低级api分配内存并在回收“垃圾”时调用free()。

总而言之,您问题的答案是“new/delete call malloc/free and handle expections”。

关于c++ - gnu c++如何实现new和delete,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31229121/

相关文章:

c++ - regex_match 有什么问题?很简单的表达

c++ - 在指向同一对象的两个指针上调用 delete

c++ - 使用 new (std::nothrow) 是否会屏蔽构造函数抛出的异常?

c++ - 在运算符C++中访问对象

JavaScript 删除运算符和 Object.create() 方法

c++ - 如何使用 for-each 循环来美化析构函数?

c++ - 如何使用 ifstream (C++) 只读取一些以前知道的行

c++ - 我怎样才能从小数中得到分子和分母?

c++ - 在 python cpl_error.h : No such file or directory 中安装 Fiona 时遇到问题

C++。何时删除 C 样式数组以释放内存