2014-02-07 58 views
1

此代碼:訪問衝突通過原子::負載訪問矢量時()

#include <iostream> 
#include <vector> 
#include <atomic> 

struct foo{ 
    std::vector<int> bar; 
}; 

int main(){ 
    std::atomic<foo> theFoo; 

    theFoo.load().bar.push_back(30); 

    return 0; 
} 

給我一個錯誤消息「訪問衝突」主叫線路12.當我在做什麼錯? 我正在使用Visual Studio 2012.

+1

您不能在'std :: atomic'中使用'foo',因爲它不是可以複製的。 – user3175411

回答

2

您違反了規則。 29.5/1說:

有一個通用類模板atomic<T>。模板參數T的類型應是可複製的(3.9)。 [注意:不是靜態可初始化的類型參數可能很難使用。 - 注完]

foo是最絕對不是平凡的可複製。

+0

它會工作,如果我讓矢量指針? –

+0

@LiessJemai:當然,對於「它會工作」的某些價值... –