本书“ 构造函数的第一个隐藏参数是this指针” 现在,当我们像
classname object;
就像创建对象的第一个内存并将对象的地址传递给默认构造函数一样,以便它可以初始化类的值。
如果这是对象的概念,那么如何创建内存,是操作系统创建的吗?
答案 0 :(得分:2)
这取决于您在哪里编写定义:
new
表达式时,空间是分配在堆上的,而对象则放置在堆上。请注意,对象的放置适用于所有构造函数:默认构造函数的唯一含义是构造对象时您不传递任何参数。
答案 1 :(得分:1)
正如约翰在评论中提到的那样,标准中没有关于如何分配/管理内存的明确信息。但是,假设没有进行任何编译器优化,并且您正在堆栈上创建对象...那么这将可能发生。
给出:
void f()
{
foo x;
}
编译器将生成类似以下内容的
:void f()
{
char foo_buffer[sizeof(foo)];
new (&foo_buffer) foo()
reinterpret_cast<foo*>(foo_buffer)->~foo();
}
foo
实例的空间在堆栈上保留,然后在该空间上调用构造函数。在作用域的最后,调用了析构函数。
答案 2 :(得分:-2)
创建对象时,操作系统将创建空间。创建对象时,操作系统会自动调用默认构造函数。