如果构造函数用于分配内存。
在下面的程序中,它不会那样工作。看
#include <iostream>
using namespace std;
class Demo
{
int i;
public:
Demo()
{
cout<<"\nDefault contructor called";
}
Demo(int x)
{
i = x;
cout<<"\nParameter contructor called";
}
void Display()
{
cout<<endl<<"i = "<<i<<endl;
}
};
int main()
{
Demo *demo = new Demo[5]; // = {1,2,3,4,5};
int i;
cout<<endl<<endl<<"First time";
cout<<endl<<"Addresses are "<<endl;
for( i=0;i<5; i++)
{
cout<<endl<< &demo[i];
}
cout<<endl<<endl<<"first time assigning values";
for( i=0;i<5; i++)
{
demo[i]= i;
}
cout<<endl<<endl<<"\nAfter first assignment";
cout<<endl<<"Addresses are "<<endl;
for( i=0;i<5; i++)
{
cout<<endl<< &demo[i];
}
cout<<endl<<endl<<"Second time assigning values";
for( i=0;i<5; i++)
{
demo[i]= i+5;
}
cout<<endl<<endl<<" After Second assignment ";
cout<<endl<<"Addresses are "<<endl;
for( i=0;i<5; i++)
{
cout<<endl<< &demo[i];
}
for( i=0;i<5; i++)
{
demo[i].Display();
}
return 0;
}
输出:
调用默认构造函数 调用默认构造函数 调用默认构造函数 调用默认构造函数 调用默认构造函数 第一次 地址是 0x8281008 0x828100c 0x8281010 0x8281014 0x8281018 第一次赋值 参数构造函数调用 参数构造函数调用 参数构造函数调用 参数构造函数调用 参数构造函数调用 第一次分配后 地址是 0x8281008 0x828100c 0x8281010 0x8281014 0x8281018 第二次赋值 参数构造函数调用 参数构造函数调用 参数构造函数调用 参数构造函数调用 参数构造函数调用 第二次分配后 地址是 0x8281008 0x828100c 0x8281010 0x8281014 0x8281018 我 = 5 我 = 6 我 = 7 我 = 8 我 = 9
这里构造函数被调用了 3 次,内存地址相同,意味着它没有分配新的内存并且使用相同的地址。为什么?
为什么构造函数被多次调用?