Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++中编译器是不是为每个类生成了默认的operator new函数,不然怎么用new表达式?我回答对吗?

C++中编译器是不是为每个类生成了默认的operator new函数,不然怎么用new表达式?我回答对吗?

提问于 2025-03-28 03:14:21
回答 1关注 0查看 34

这个问题成换个问法 new 是怎么调用operator new,是全局的operator new函数,还是每个类的operator new函数 new 本身流程无法改变,我们改变提供接口函数operator new, 如何定制的new,默认方式 c++ libstdc++ 已经帮助写好,定制方式。

c++类默认函数有6个,默认构造函数,默认析构函数,默认析构函,拷贝构造函数 等

并没有默认的 operator new函数。

正如你准确提问一下,

operator new函数 是一个函数 ,这个标准库lidbstdc++提供,是可以重载的

对应的代码位置:

https://github.com/gcc-mirror/gcc/blob/master/libstdc++-v3/libsupc++/new_op.cc​github.com/gcc-mirror/gcc/blob/master/libstdc++-v3/libsupc++/new_op.cc

new是表达:是c++语法的高级抽象,既然抽象根本不知道内部怎么实现的,

通过阅读

More Effective C++ Item 8: Understand the different meanings of new and delete.

添加图片注释,不超过 140 字(可选)

添加图片注释,不超过 140 字(可选)

添加图片注释,不超过 140 字(可选)

What you can change is how the memory for an object is allocated. The new operator calls a function to perform the requisite memory allocation, and you can rewrite or overload that function to change its behavior

划重点:

动手验证

代码语言:javascript
运行
AI代码解释
复制
//void* p = new (1024); //编译不过语法不对,从语法强制要求

 void* p = operator new (1024);  //这是一个标准库函数,自然可以调用

继续验证

new 是c++高级抽象,具体怎么实现的只能通过汇编来推断

回答 1

进击的老头子

发布于 2025-04-07 22:50:21

回答基本正确,c++ 实现 new 操作符时,标准库会调用底层系统的内存分配函数,所以底层是汇编还是c实现,并不知道,但是可以知道地是,要处理内存分配失败,要考虑内存对齐、多线程安全和内存池管理和性能等诸多因素。

和开发者交流更多问题细节吧,去 写回答
相关文章
operator new与new operator
operate new 是一个分配原始内存的函数——至少在概念上,它与 malloc() 没有太大区别。例如:
公众号guangcity
2021/12/20
1.5K0
【C++内存管理】:new与delete,operator new与operator delete
📝前言: 上篇文章【C++高潮:类与对象】我们对C++的类与对象的知识点进行了讲解。 这篇文章我们在C语言内存管理的基础上探讨一下C++内存的管理: 1,C/C++内存分布 2,C语言内存管理 3,C++内存管理方式 4,operator new与operator delete 5,new和delete的实现原理 6,定位new表达式 7,malloc/free和new/delete的区别
用户11029137
2025/03/12
2470
C++中的定位放置new(placement new)
一般来说,使用new申请空间时,是从系统的“堆”(heap)中分配空间。申请所得的空间的位置时根据当时的内存的实际使用情况决定的。但是,在某些特殊情况下,可能需要在程序员指定的特定内存创建对象,这就是所谓的“定位放置new”(placement new)操作。
恋喵大鲤鱼
2018/08/03
1K0
C++中的new有几种?
1.普通new 形式:int* p = new int; 此时不能通过p是否为nullptr来判断内存是否开辟成功,而是需要通过bad_alloc来捕获异常。
lexingsen
2022/02/25
5430
C++内存管理(new operator/operator new/operator delete/placement new)
我们平时使用的new是new操作符(new operator),就像sizeof一样是语言内置的,不能改变它的含义,功能也是一样的
WindSun
2019/09/02
1.7K0
C++内存管理(new operator/operator new/operator delete/placement new)
C++ 中 malloc 和 new 的区别
C++ 中 malloc 和 new 都能开辟内存,这篇文章介绍了 C++ 中 malloc 和 new 开辟新内存的区别。
zayyo
2023/11/30
4580
【C++】C/C++内存管理
好的,并没有初始化。 那这样看的话,C++搞出new这些东西和C语言的malloc这些对于内置类型的操作好像除了用法之外也没有什么很大的区别。 那所以呢? C++搞出这些东西更多的是为了自定义类型,那new和delete操作自定义类型我们后面也会专门讲解,先不急。
YIN_尹
2024/01/23
2300
【C++】C/C++内存管理
C++ 06 - new
关于c++中的new, 主要分为operator new 和 new operator.
Reck Zhang
2021/08/11
3710
【说站】JavaScript中new函数的原理
JavaScript中new函数的原理 说明 1、new关键词将首先创建一个空对象。 2、将空对象的原型对象指向构造函数的原型属性。 从而继承原型方法。 3、this指向空对象。 执行构造函数中的代码,以获得私有属性。 4、如果构造函数返回对象res,则返回值res返回。 如果返回值不是对象,则返回创建的对象。 实例 function _new(target){   var obj = {},       params = [].splice.call(arguments,1),       resul
很酷的站长
2022/11/24
3420
【说站】JavaScript中new函数的原理
用new创建数组
由于new创建的对象是在运行时确立的,所以有着具体情况具体分析的优点,那么什么叫做具体情况具体分析呢?我觉得c++ primer plus的一个例子十分贴切——比如你在度假,已经做好每天的参观计划,可突然有一天天气不好或你心情不好,此时你就不想参观了,如果此时是在编译状态,系统是不允许的,你必须按照计划去参观,但运行时状态,系统是允许的,此时你就可以呆在酒店尽情的玩耍了。用new创建数组也有此优点,即数组长度可以根据情况而定。
全栈程序员站长
2022/08/28
7370
用new创建数组
String s = new String("xyz")创建了几个实例你真的能答对吗?
这是一道很经典的面试题,在一本所谓的Java宝典上,我看到的“标准答案”是这样的:
CoderW
2022/07/13
7440
String s = new String("xyz")创建了几个实例你真的能答对吗?
object __new__函数
class Foo(object): def __new__(cls,*agrs, **kwds): print(agrs) #inst = super(Foo,cls).__new__(cls,*agrs, **kwds) 这样写会报错,原因是父类object的__new__不支持那么多参数 inst = super(Foo,cls).__new__(cls) print(inst) return inst
用户1733462
2019/03/04
4680
详解JavaScript的new表达式
一、new 用于创建用户定义的对象实例 或 创建具有构造函数的内置对象实例。 // 语法 new constructor[([arguments])] --- 1、使用规则 当执行 new Foo(...) 时,会发生以下事情: 创建一个继承自 Foo.prototype 的新对象; 使用指定参数调用构造函数,并将 this 绑定到新对象(new Foo 等同于 new Foo(),表示没有指定参数)。 构造函数返回值就是 new 表达式结果。如果构造函数没有显式返回,则使用步骤1创建的对象(通常构造函数没
Learn-anything.cn
2021/12/26
3010
【C++】内存管理和模板基础(new、delete、类及函数模板)
从语言的角度看,数据段叫静态区,代码段叫常量区。从操作系统来看,就叫数据段和代码段。
秦jh
2024/03/19
1690
【C++】内存管理和模板基础(new、delete、类及函数模板)
js new Date() 默认是8点
最近在写一个页面,需要用到时间控制。然后我通过new Date()传入日期字符串创建了一个对象,并与当前时间做时间戳比较,结果12点刚过,就出问题了。举个栗子
烟草的香味
2019/12/31
9.3K0
js new Date() 默认是8点
java 父类 new 子类
父类: public class A {   public  void  say(){        System.out.println("Hello   A");   } } 子类: public class B extends  A{ public  void  say(){ System.out.println("Hello   B"); } public void sing(){ System.out.println("sing   hell
用户1220053
2018/02/09
2.7K0
2018-10-02 你知道怎么new BigDecimal吗?
https://stackoverflow.com/questions/9795364/java-bigdecimal-precision-problems
Albert陈凯
2018/10/08
5380
Overleaf中设置表格中的字体为Times New Roman
- 在文档的导言区添加 `\usepackage{times}` 宏包,这将把整个文档的字体设置为Times New Roman,包括表格中的字体。例如:
zhangjiqun
2024/12/28
8560
C++初阶(类中的默认成员函数)
呀哈喽,我是结衣 今天给大家带来的是类里面的默认成员函数,一共有六个默认的成员函数哦,包括构造函数,析构函数,拷贝构造函数,运算符重载函数,const成员函数,那么正篇开始。
Yui_
2024/10/15
3410
C++初阶(类中的默认成员函数)
C++中的空类默认包含哪些类成员函数
空类 class Empty { } 空类包含的函数(6个) class Empty { public: Empty(); // 缺省构造函数// Empty( const Empty& ); // 拷贝构造函数// ~Empty(); // 析构函数// Empty& operator=( const Empty& ); // 赋值运算符// Empty* operator&(); // 取址运算符 const Empty* operator&() const; // 取址运算符 const };
全栈程序员站长
2021/04/07
2K0

相似问题

怎么确定快照回滚完成了?

1521

我不太懂这个类 new MyX509TrustManager()?

0341

Failed to establish a new connection?

28.1K

new WebRTCAPI()报undifined ?

1609

New password for the MySQL "root" user?

2529
相关问答用户
新浪微博 | 高级总监擅长4个领域
某公司 | 程序员擅长1个领域
海固科技 | Java工程师擅长4个领域
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档