Class B;
B *b = new B(); // default constructor
B *b1 = new B(10); // constructor which takes an argument B(int x)
Run Code Online (Sandbox Code Playgroud)
但是,如果我们要编写自定义版本new,则语法为
Class B
{
/*...*/
static void* operator new(size_t size);
}
Run Code Online (Sandbox Code Playgroud)
如何将语句new B()转换为函数调用
operator new(sizeof(B))?
它如何跟踪调用哪个构造函数,即它如何区分new B()和new B(int x)?
被new实现为C++中的宏?
你的问题应该是:
编译器如何区分
new B()和new B(10),当B::operator new语法相同时?
好吧,new 只需分配内存,然后编译器立即将调用插入构造函数.所以这是无论如果你打电话new B,new 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);
Run Code Online (Sandbox Code Playgroud)
实际上,构造函数不返回任何内容.但是上面的伪代码只是内部东西的类比表示.