C++ 当运算符new在此代码“new T”中返回地址时会发生什么情况?

C++ 当运算符new在此代码“new T”中返回地址时会发生什么情况?,c++,constructor,new-operator,C++,Constructor,New Operator,我是说在进入构造函数之前代码是什么样子的?例如,在第8行中,运算符new返回地址,然后代码看起来像T*T=T 0x0FF00,因为它类似于对象定义,不能像0x0FF00 T。因此,如果它是真的,那么运算符new返回的这个地址如何位于类型T之后,而无视运算符new之前返回它的事实 class T{ public: T(){} }; int main () { T *t = new T; //line 8 } 这是t*类型的t声明。它正由=”后面的表达式初始化。整个新的T部分就是这

我是说在进入构造函数之前代码是什么样子的?例如,在第8行中,运算符new返回地址,然后代码看起来像T*T=T 0x0FF00,因为它类似于对象定义,不能像0x0FF00 T。因此,如果它是真的,那么运算符new返回的这个地址如何位于类型T之后,而无视运算符new之前返回它的事实

class T{
public:
    T(){}
};

int main ()
{
  T *t = new T; //line 8

}
这是t*类型的t声明。它正由=”后面的表达式初始化。整个新的T部分就是这个初始值设定项中的新表达式

新表达式导致为T类型的对象分配内存,然后在该空间中构造该对象。新表达式返回指向该对象的指针。也就是说,计算新表达式后,该行现在看起来如下所示:

T *t = new T;
//     ^^^^^
我假设您使用0x0FF00作为示例内存地址-在这种情况下,您可以想象该行变成:

T *t = returned_pointer;
指针t现在用该内存地址初始化

您可能会被一个新表达式的确切功能所迷惑。它有以下两个步骤:

它调用适当的分配函数(通常是运算符new),传递存储类型为T的对象所需的内存大小。运算符new分配该内存并返回指向该位置的地址

然后在该空间中初始化一个T类型的对象


对不起,我读了三遍你的帖子,我仍然不明白你想问什么。你在这里问什么一点也不清楚。你们能编辑你们的问题来澄清你们在说什么吗?你们是什么意思代码看起来像T*T=T 0x0FF00?在这个代码中,新的T操作符返回地址,然后构造函数必须在这个地址创建对象。那么构造函数是如何得到这个地址并认为这个地址像对象名的呢?@mzarb这恐怕还是没有意义
T *t = 0x0FF00; // Note: this wouldn't actually compile because 0x0FF00 is an integer literal