C++ 构造函数运行时/编译时

标签 c++ dynamic constructor runtime compile-time

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

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/

相关文章:

c++ - 这在虚函数中意味着什么?

javascript - highcharts 使用 addSeries 动态添加系列

c++ - Class声明中,为什么构造函数中的参数不能和私有(private)部分定义的变量重名?

cocoa-touch - 当我们可以写[NSString new]时,为什么我们有[NSString string]?

constructor - 不可变(数据)类上的多个构造函数

c++ - 使用 std::sort() 对对象 vector 进行排序

c++ - 放置新运算符是否会禁用默认的新运算符?

c++ - boost::lockfree::spsc_queue的read_available和write_available应该如何使用?

postgresql - 使用 Lisp/Postmodern/PostgreSQL 变量作为表名

javascript - iPhone 的 jQuery 动态背景位置