我制作了用于检查ABA问题的链接列表。但是我对模板有问题... 请检查我的代码
我几乎完成了代码。但它存在有关“琐事可复制”的模板错误
#define _ENABLE_ATOMIC_ALIGNMENT_FIX
#include<stdio.h>
#include<iostream>
#include<atomic>
#include<thread>
using namespace std;
template<class T>
class slist {
private:
struct Node { T item; shared_ptr<Node> next; };
atomic<shared_ptr<Node>> head;
public:
class reference {
shared_ptr<Node> p;
public:
reference(shared_ptr<Node> p_) {}
T& operator*() { return p->item; }
T* operator->() { return &p->item; }
};
auto find() const {
auto p = head.load();
while (p && p-> next!=NULL) {
printf("%d ", p->item);
p = p -> next;
}
return reference(move(p));
}
void push_(T item) {
auto p = make_shared<Node>();
p->item =item;
p->next = head;
while (!head.compare_exchange_weak(p->next, p)) {}
}
void pop_() {
auto p = head.load();
while (p && !head.compare_exchange_weak(p, p -> next)) { ; }
}
};
template<typename T>
void func1(slist<T> s){
for (int i = 0; i < 1000; i++) {
s.push_(i);
}
}
//skip
错误注释为 “原子要求T必须是可复制的。”
我希望该错误消失。...