gpt4 book ai didi

c++ - C++ 'new' 运算符是如何实现的

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:26:10 26 4
gpt4 key购买 nike

Class B;
B *b = new B(); // default constructor
B *b1 = new B(10); // constructor which takes an argument B(int x)

但是,如果我们想写一个自定义版本的new,语法是

Class B
{
/*...*/
static void* operator new(size_t size);
}

语句new B()是如何转换为函数调用的运算符 new(sizeof(B))?

它如何跟踪调用哪个构造函数,即它如何区分 new B()new B(int x)

new 是作为 C++ 中的宏实现的吗?

最佳答案

你的问题应该是:

How compiler distinguish between new B() and new
B(10)
, when the B::operator new syntax is same ?

嗯,new 只是分配内存,然后编译器立即插入对构造函数的调用。所以不管你调用的是 new Bnew B() 还是 new B(10)

编译器解释如下:

B *b = static_cast<B*>(B::operator new(sizeof(B)))->B();
B *b1 = static_cast<B*>(B::operator new(sizeof(B)))->B(10);

实际上构造函数不返回任何东西。但上面的伪代码只是内部东西的类比表示。

关于c++ - C++ 'new' 运算符是如何实现的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9595758/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com