声明循环外部和内部对象之间的区别是什么

时间:2015-03-27 13:27:04

标签: c++ for-loop memory

我想知道,如果使用对象obj的这两种方式之间有什么区别。两个例子中的内存会发生什么?

  • 示例1:在循环之外声明对象
  • 示例2:在循环内声明对象。
  • 在这两个示例中,我都调用函数 func ,它将vector作为float类型的参数。此向量的维度不小于 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>);
}

1 个答案:

答案 0 :(得分:-1)

当您在循环内声明对象时,将在每次迭代时创建一个新对象,并在每次迭代结束时销毁该对象。这是因为该对象在{}内有一个范围。

当你在外面声明它时,会创建一个对象并使用它,但当你把它放在一个循环中时,会在每次迭代时创建并销毁一个新对象,这会影响速度。

也就是说,当你使用

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个对象。这将增加执行时间。所以,最好使用第一个。