据我所知,我们可以在运行时或编译时创建对象。例如
SomeType object1;
SomeType *object2 = new SomeType;
所以我认为在此处的代码中;
int main(){
cout << "lalalal";
SomeType object1;
}
应该为 object1 调用构造函数,然后 lalalal 应该出现在屏幕上。因为编译器在程序启动之前分配内存。那么我在什么时候错了?
最佳答案
As I know we can create objects in runtime or in compile-time.
不是真的。在您的代码示例中,第一个对象是使用自动存储持续时间创建的(通常描述为“在堆栈上”),第二个对象是使用分配 动态 存储持续时间(通常描述为“在堆上”)。但这些都发生在运行时。
A constructor should be called for object1 and then lalalal should appear at screen.
函数中的语句是从上到下执行的(显然不包括循环)。所以对象是第二个创建的。*
Because compiler is allocating the memory before the program starts.
是的,有可能内存是提前分配的。但就可观察到的影响而言,这无关紧要。
* 然而,由于您没有在字符串中包含换行符,您可能看到的是行缓冲的效果;在许多系统上,直到收到换行符或程序终止才会显示输出。
关于C++ 构造函数运行时/编译时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14114472/