在循环外和循环内声明对象有什么区别
What is the difference between declaring an object outside and inside of a loop
我想知道,这两种使用对象 obj 的方式之间有什么区别(如果有的话)。在这两个例子中内存会发生什么变化?
- 示例 1:在循环外声明对象
- 示例 2:在循环内声明对象。
- 在这两个示例中,我都调用了函数 func,它接受类型为
float
的 vector
作为参数。这个向量的维度不小于9000个元素。
示例 1
MyObject obj;
for(int i = 0; i < n; i ++)
{
obj.func(vector<float>);
}
示例 2
for(int i = 0; i < n; i ++)
{
MyObject obj;
obj.func(vector<float>);
}
当您在循环内声明对象时,每次迭代都会创建一个新对象,而现有对象会在每次迭代结束时销毁。这是因为该对象将在 {}
内有一个范围。
当你在外面声明它时,会创建一个对象并使用它,但是当你把它放在循环中时,每次迭代都会创建和销毁一个新对象,这会影响速度。
也就是说,当你使用
MyObject obj;
for(int i = 0; i < n; i ++)
{
obj.func(vector<float>);
}
你只创建了一个对象。但是当你使用
for(int i = 0; i < n; i ++)
{
MyObject obj;
obj.func(vector<float>);
}
您创建和销毁 n
对象。这将增加执行时间。所以,还是用第一个比较好。
我想知道,这两种使用对象 obj 的方式之间有什么区别(如果有的话)。在这两个例子中内存会发生什么变化?
- 示例 1:在循环外声明对象
- 示例 2:在循环内声明对象。
- 在这两个示例中,我都调用了函数 func,它接受类型为
float
的vector
作为参数。这个向量的维度不小于9000个元素。
示例 1
MyObject obj;
for(int i = 0; i < n; i ++)
{
obj.func(vector<float>);
}
示例 2
for(int i = 0; i < n; i ++)
{
MyObject obj;
obj.func(vector<float>);
}
当您在循环内声明对象时,每次迭代都会创建一个新对象,而现有对象会在每次迭代结束时销毁。这是因为该对象将在 {}
内有一个范围。
当你在外面声明它时,会创建一个对象并使用它,但是当你把它放在循环中时,每次迭代都会创建和销毁一个新对象,这会影响速度。
也就是说,当你使用
MyObject obj;
for(int i = 0; i < n; i ++)
{
obj.func(vector<float>);
}
你只创建了一个对象。但是当你使用
for(int i = 0; i < n; i ++)
{
MyObject obj;
obj.func(vector<float>);
}
您创建和销毁 n
对象。这将增加执行时间。所以,还是用第一个比较好。