12

通过阅读 c++11 草案n3242的第 20.7.2.5 节,看起来我们对 shared_ptr 进行了原子操作,这使我们能够对复杂结构进行无锁操作,而无需担心 GC/内存泄漏。

但是,我无法在 GCC-4.7.0 中成功使用它。我只是测试了以下程序

#include <atomic>
#include <memory>
#include <string>

struct X {
    int x;
    double y;
    std::string s;
};

int main() {
    std::shared_ptr<X> x(new X);
    auto p = std::atomic_load(&x);
}

它有编译器错误:

c.cpp:13:33: error: no matching function for call to ‘atomic_load(std::shared_ptr<X>*)’

有谁知道我在这里错过了什么?还是只是 gcc 还没有实现呢?

4

3 回答 3

3

有提议弃用 shared_ptr 的这些 atomic_store/atomic_load 方法以支持新的 atomic_shared_ptr 类:http ://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4162.pdf

因此,当您获得带有 atomic_load 的 libstc++ 版本时,它很可能已经包含新的原子指针,这在几个方面都更好。

MSVC STL 不久前已经实现了这些方法,并且 libc++ 也声称完全符合 C++11/14,因此它们必须在其最新版本中可用。

于 2014-12-09T18:12:25.907 回答
2

看起来它还没有在 libstdc++ 中。

它也不在 libc++ 中

VS11 beta 有它。我认为这是我在 VS11 的库中发现的第一个不在 libc++ 中的东西。

于 2012-06-09T01:06:07.367 回答
-6

使用带有 -std=c++11 的 clang++ 来编译应该让它工作的代码。

于 2015-07-09T14:10:33.567 回答