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

Iterator with Static Array Member variable

本文关键字:变量 迭代器 组成员 数组 静态      更新时间:2023-10-16

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

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

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

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

我假设您希望在每个循环的迭代器构造时将一些内容复制到静态数组中。我进一步假设您覆盖了整个数组,您这样做是因为您已经意识到,否则数据将丢失。如果你用它来求sg,我很乐意抛弃这个假设。Else,这是range的常见问题。您的代码将无法重入,更不用说线程安全了。这意味着,取决于你怎么做,你甚至可能不能做嵌套循环。这是个非常坏主意……讨厌,就像你得到的范围和临时工一样糟糕。也许最好的方法/解决方法是将shared_ptr<>保留为您想要保留的内容。如果您为ptr写入begin()和end(),则可能包括范围本身,而不是范围。

从enable_shared_from_this()中选择此模糊或潜在的UB。