我们可以在c++中多次创建相同名称的对象吗
can we create same object with same name multiple times in c++
为什么以下代码不会抛出错误:
假设我们有一个名为myclass的类。
场景1:
for(int i=0;i<5;i++)
{
myclass m;
}
场景2:
for(int i=0;i<5;i++)
{
myclass m(i);
}
假设我们也定义了单参数构造函数。以上两个都不是抛出错误。这两种情况下到底发生了什么。
变量m
是local
,对于这类变量,Lifetime
仅限于其Scope
。
-
作用域是可以访问变量的代码的区域或部分。
-
Lifetime是对象/变量处于有效状态的时间持续时间。
变量m的范围在for循环和so寿命结束时结束。因此,在下一次迭代开始时,m
已不在内存中,并且不存在由相同名称引起的冲突。
两个场景都可以正常工作。
第一种情况:
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
相关文章:
- 如何为模板化对象创建模板向量?VS正在投掷C3203
- 具有包含其他对象的类的对象创建顺序
- 为什么我们再次从结构对象创建结构变量?
- 将对象创建为全局/静态对象会崩溃,而本地对象不会崩溃
- 如何创建一个对象创建函数,该函数将由与其关联的名称调用?
- 如何为自定义模板对象创建专门的函数模板
- 对象创建错误的C++矢量
- 如何为Python Swigged C++对象创建和分配回调函数
- 在 C++ 中为 C 样式对象创建一个透明包装类
- 此类模板的对象创建如何工作?
- C++ 中的对象创建类型有什么区别?
- 未知大小的数组作为类成员,用于在运行时(对象创建时间)创建数组的对象
- 如何仅通过父类对象限制对象创建
- 在正确性或良好的代码结构方面,这种动态对象创建看起来如何
- 无法将类对象创建为另一个类的成员
- 如何从现有基类对象创建派生类对象
- 在 DTor 之前删除的静态对象创建的线程?
- C++:定义多个构造函数时的对象创建/销毁序列
- 从对象创建矢量包装器,该对象只允许使用索引访问向量
- 是否可以为CPP中的对象创建一组指针