据我所知,我们可以在运行时或编译时创建对象。例如

SomeType object1;
SomeType *object2 = new SomeType;

所以我认为在这里的代码中;
int main(){

    cout << "lalalal";
    SomeType object1;
}

应该为object1调用一个构造函数,然后lalalal应该出现在屏幕上。因为编译器正在程序启动之前分配内存。那我错在哪一点呢?

最佳答案



并不是的。在您的代码示例中,第一个对象的创建具有自动存储持续时间(通常称为“在堆栈上”),第二个对象具有分配的动态存储持续时间(通常称为“在堆栈上”)。但是这些都在运行时发生。



函数中的语句从上到下执行(显然不包括循环)。因此,第二个对象被创建。*



是的,有可能提前分配了内存。但是就可观察到的效果而言,这是无关紧要的。

*但是,由于您没有在字符串中包含换行符,因此您可能会看到行缓冲的效果;在许多系统上,直到收到换行符或程序终止,才显示输出。

关于c++ - C++构造函数运行时/编译时,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14114472/

10-12 03:20