具有静态数组成员变量的迭代器

时间:2016-10-11 21:35:42

标签: c++ iterator

为迭代器定义静态数组成员变量是不是一个坏主意?

在下面的嵌套循环中,静态数组是否会被创建并销毁1000次? (假设我们使用编译器优化)

X是具有begin()end()成员函数的范围对象。这两个成员函数都返回一个带有静态数组成员变量的迭代器。

for (int i = 0; i < 1000; ++i) {
    for (auto i: X) {
        // do stuff.
    }
}

1 个答案:

答案 0 :(得分:1)

我假设您希望在每个循环上的迭代器构造中将某些内容复制到静态数组中。我进一步假设你覆盖整个阵列并且你正在做这个,因为你已经意识到数据会丢失。如果您将它用于sg,我会很乐意抛弃这种假设。否则,但这是一个非常普遍的问题。 您的代码不会是可重入的,更不用说线程安全了。这意味着,根据您的操作方式,您甚至可能无法执行嵌套循环。这是非常坏主意...... ...哎呀,就像你和临时对手一样糟糕。也许最好的事情/解决方法是保持shared_ptr&lt;&gt;你要保留什么。如果您为ptr而不是范围编写此拥有的begin()和end(),则可能包括范围本身。 (来自enable_shared_from_this()的这个默默无闻或潜在的UB。)