如果构造函数用于分配内存。
在下面的程序中,它不是那样工作的。 见
#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;
}
输出:
Default contructor called Default contructor called Default contructor called Default contructor called Default contructor called First time Addresses are 0x8281008 0x828100c 0x8281010 0x8281014 0x8281018 first time assigning values Parameter contructor called Parameter contructor called Parameter contructor called Parameter contructor called Parameter contructor called After first assignment Addresses are 0x8281008 0x828100c 0x8281010 0x8281014 0x8281018 Second time assigning values Parameter contructor called Parameter contructor called Parameter contructor called Parameter contructor called Parameter contructor called After Second assignment Addresses are 0x8281008 0x828100c 0x8281010 0x8281014 0x8281018 i = 5 i = 6 i = 7 i = 8 i = 9
这里的构造函数被调用了三次,内存地址都是一样的,说明不是分配新内存,而是使用同一个地址。为什么?
为什么多次调用构造函数?
最佳答案
当你这样做时:
demo[i]= i;
i
用于使用采用 int 的构造函数构造一个临时对象。然后将此临时文件分配给 demo[i]
。分配不会导致 demo[i]
被重构为具有不同地址的新对象(对象不能被重构,并且永远不能改变它们的地址),它只会导致成员分配从 temporary 的成员到 demo[i]
的成员(除非你提供了一个赋值运算符来做一些不同的事情,而你没有)。
关于c++ - 构造函数调用分配内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18999617/