C++ 在不创建对象的情况下调用构造函数
下面的代码中到底发生了什么C++ 在不创建对象的情况下调用构造函数,c++,object,constructor,C++,Object,Constructor,下面的代码中到底发生了什么 #include<iostream.h> class Demo { public : Demo() { cout<<"\nIn Demo const"; } ~Demo() { cout<<"\nin demo dest"; } }; void main() { Demo(); } #包括 课堂演示 { 公众: 演示() { co
#include<iostream.h>
class Demo
{
public :
Demo()
{
cout<<"\nIn Demo const";
}
~Demo()
{
cout<<"\nin demo dest";
}
};
void main() {
Demo();
}
#包括
课堂演示
{
公众:
演示()
{
cout您没有显式调用构造函数,而是此代码创建了一个类型为Demo
的临时未命名对象,该对象在之后立即被销毁;
是,为该临时对象分配内存(自动,在堆栈上),并在;
之后释放内存(再次自动释放)。同时,按预期调用构造函数和析构函数。是,分配内存,但在堆栈上,Demo()
正在创建一个自动销毁的临时对象。Begin picky:在本例中,该对象没有任何成员,也不涉及继承。因此该对象不需要堆栈上的任何空间。至少,任何健全的编译器都会将其优化为普通函数调用。@KirilKorov:no,sizeof
永远不能为零。但是大多数编译器实际上不会为临时无数据对象使用任何存储,这一点根据“仿佛”规则是可以的。我要补充的是:(1)分配(很可能)不会消耗任何CPU时间,因为在分配/释放期间没有执行任何实际操作(编译器只是在堆栈帧中保留1字节内存)(2)理论上,即使是分配(内存保留)也可能因“假设规则”而优化@KirilKirov感谢您提供有关sizeof的信息,我不知道。这是对的,但更奇怪的是:从语法上讲,您不能自己调用构造函数。您只能创建对象,在创建对象后,构造函数将自动被调用。