为什么以下代码不会引发错误:
假设我们有一个名为myclass的类。
方案1:
for(int i=0;i<5;i++)
{
myclass m;
}
方案2:
for(int i=0;i<5;i++)
{
myclass m(i);
}
假设我们也定义了单个参数构造函数。 以上两个都不抛出错误。两种情况下到底发生了什么。
答案 0 :(得分:5)
变量data
是m
,对于这种类型的变量local
限于其Lifetime
。
范围是可访问变量的代码的区域或部分。
生命周期是对象/变量处于有效状态的时间持续时间。
变量m的作用域在for循环结束时终止,因此生命周期结束。因此,在下一次迭代的开始,Scope
不再在内存中,并且不会出现由相同名称引起的冲突。
答案 1 :(得分:-2)
两种情况都可以正常工作。
第一种情况:
for(int i=0;i<5;i++)
{
myclass m; // default constructor will be called
// Memory allocation for object
/* Some code */
//destructor will be called at end i.e scope end
// Memory released for the object
}
第二种情况:
for(int i=0;i<5;i++)
{
myclass m(i);// parametrized constructor will be called.
// Memory allocation for object
/* Some code */
//destructor will be called at end i.e at scope end.
// Memory released for the object
}
如果可以使用相同的内存地址为对象分配内存,则每次都可以获取相同的地址,但这不是必需的
#include <iostream>
using namespace std;
class myclass{
public:
int i;
myclass():i(0){}
myclass(int x):i(x){}
};
int main()
{
for(int i=0;i<5;i++)
{
myclass m(8);
cout<<&m<<endl;
}
return 0;
}
输出:
0x7ffdf3daec20
0x7ffdf3daec20
0x7ffdf3daec20
0x7ffdf3daec20
0x7ffdf3daec20