gpt4 book ai didi

C++循环堆栈分配

转载 作者:行者123 更新时间:2023-11-30 00:59:16 25 4
gpt4 key购买 nike

在做类(class)作业和学习 C++ 时,我正在阅读何时使用堆栈分配和动态分配。我知道在很多情况下使用堆栈分配更容易也更好。但有一个简单的情况让我感到困惑。

假设您有一个 for 循环:

for(int i = 0; i < 10; i++)
{
MyObject obj(file);
obj.doSomething();
}

现在的问题是,如果对象包含状态,它会在从 1​​ 到 10 的迭代中迭代时保持它的状态(保持同一个对象)。也许来自 Java/C# 背景让我走错了路。但我只看到两种解决方法:

  1. 使用动态内存。
  2. 不是将文件提供给构造函数而是将文件提供给方法 doSomething(file) 但如果您有不止一种方法来操作文件对象,这就不是很好了,例如doSomethingElse(文件)

那么你们在这种情况下会怎么做,或者您根本不会让自己陷入这种情况?

更新:原来我误解了,它按预期工作。检查下面的遮阳篷!谢谢大家

最佳答案

在您发布的代码中,obj 不会在迭代之间保持任何状态。

for(int i = 0; i < 10; i++) 
{
MyObject obj(file); //obj enters scope, constructor is called with 'file'
obj.doSomething();
} //obj loses scope, destructor is called

在那个例子中,obj 每次都是不同的对象。它可能使用与前一个对象相同的“堆栈”内存位置,但类析构函数和构造函数在迭代之间被调用。

如果您希望对象只构造一次并重复使用,请在循环之前构造。

function(file)
{
MyObject obj(file); //obj enters scope, constructor is called with 'file'

for(int i = 0; i < 10; i++)
{
obj.doSomething(); //Same object used every iteration
}

} //obj loses scope, destructor is called

关于C++循环堆栈分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4729900/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com