在循环外和循环内声明对象有什么区别

What is the difference between declaring an object outside and inside of a loop

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


示例 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 对象。这将增加执行时间。所以,还是用第一个比较好。