[英]How to avoid use of copy-constructor and move constructor in C++
我遇到了 C++ 項目的類實現問題。 這是代碼:
A {
private:
std::atomic<bool> flag;
std::atomic<int> value;
public:
A(){}
};
class B{
private:
std::vector<A> vett;
public:
B(){}
void add_A(A a){
vett.push_back(a);
}
};
int main() {
// Write C++ code here
B b{};
return 0;
}
我知道編譯錯誤是由std::atomic引起的,因為它不是可復制構造的,也不是可復制分配的,並且 class A 具有 std::atomic 作為屬性。 不幸的是 class A 應該是線程安全的 class,所以我需要使用std::atomic或std::mutex (這也是不可復制的)。 通過閱讀其他問題,為了克服這個問題,我可以為 std::atomic 創建一個包裝器結構,但是這樣會損害原子性,那么另一種可能的解決方案是什么?
通過顯式復制原子成員的當前值,可以使A
既可復制又可移動。 當然,這些方法都不是線程安全的。
struct A{
std::atomic<int> m_member{false};
A()=default;
A(const A& other):m_member(other.m_member.load()){}
A(A&& other):m_member(other.m_member.load()){
// Move other members
}
A& operator=(const A& other){
if(&other!=this){
// De-init current members.
this->m_member=other.m_member.load();
// Copy other members.
}
return *this;
}
A& operator=(A&& other){
if(&other!=this){
// De-init current members.
this->m_member=other.m_member.load();
// Move other members.
}
return *this;
}
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.