【发布时间】:2015-12-01 13:51:04
【问题描述】:
我的课程安排如下:
#include <iostream>
#include <vector>
struct Tracker
{
int a = 0;
void update()
{
a++;
}
};
struct OtherClass
{
std::vector<Tracker> activeTrack;
void updateAll()
{
for (Tracker tr : activeTrack) {
tr.update();
}
}
};
int main()
{
OtherClass o;
o.activeTrack.resize(1);
o.updateAll(); // does nothing?!
std::cout << o.activeTrack[0].a << '\n'; // Is 0; should be 1!
}
(live demo)
对于堆栈分配的对象在向量中的行为方式,是否有一些非常简单但我不理解的东西?
【问题讨论】:
-
请花一些话来解释你真正打算做什么。后续的编辑也偏离了原代码sn-p。
-
@g24l:有吗?该代码是 OP 代码的等效 版本,但采用完整的最小测试用例形式(我们要求)。以前有一些难以阅读的杂乱无章的宣传,这不是必需的,因为问题在代码 cmets 中已明确说明。您对编辑的哪一部分感到困惑?
-
@LightnessRacesinOrbit 与之前的版本相比非常清楚,您发现“漫无边际的宣传”是哪一部分?该操作还提到了 Tracker 在内部共享 ptr。可能会更好地反映在那个版本中。将问题定制为答案并不是一个好习惯。
-
@g24l:我没有“根据答案定制问题”。我针对 Stack Overflow 定制了这个问题。 OP 只提到了一个 shared_ptr 作为一个有趣的观察在问题已经解决之后。无需再次将其恢复。请... 停止 ...
-
@LightnessRacesinOrbit 在我看来并不像,共享的 ptr 在 Tracker object 中,可以通过指针复制它并更新值。最好有原始代码。无论如何,您添加的测试用例非常明显。