如何解决尝试编译此构造函数时出现错误
我有一个带有构造函数的类,但编译失败并显示错误:
错误:使用已删除的函数'std::atomic
我正在努力理解这个错误意味着什么。我一直在尝试将一些代码从使用 tbb::atomic
更新为使用 std::atomic
,并且此错误之前没有出现在 tbb::atomic
中。
让编译器感到不安的代码是:
#include <boost/aligned_storage.hpp>
template <typename T>
class Holder<T,true>
{
public:
//! Construct a value (there mustn't be one already)
template <typename ARG>
void Construct(const ARG &arg) { new(Raw()) T(arg); }
private:
typename boost::aligned_storage<sizeof(T),boost::alignment_of<T>::value>::type impl;
void *Raw() { return &impl; }
};
特别是那一行:
void Construct(const ARG &arg) { new(Raw()) T(arg); }
如果有人能帮助我了解正在发生的事情,我将不胜感激。
编辑:
完整的错误信息:
holder.hpp:75:34: error: use of deleted function 'std::atomic<long unsigned int>::atomic(const std::atomic<long unsigned int>&)'
75 | void Construct(const T &arg) { new(Raw()) T(arg); }
| ^~~~~~~~~~~~~~~~~
In file included from /include/TPtools/boost/smart_ptr/detail/sp_counted_base_std_atomic.hpp:19,from /include/TPtools/boost/smart_ptr/detail/sp_counted_base.hpp:48,from /include/TPtools/boost/smart_ptr/detail/shared_count.hpp:29,from /include/TPtools/boost/smart_ptr/shared_ptr.hpp:28,from /include/TPtools/boost/shared_ptr.hpp:17,from movegate.cpp:14:
/pkgsData/gcc-v9.3.0p1/Linux/RHEL6.0-2013-x86_64/include/c++/9.3.0/atomic:824:7: note: declared here
824 | atomic(const atomic&) = delete;
| ^~~~~~
holder.hpp: In instantiation of 'void Holder<T,true>::Construct(const T&) [with T = std::atomic<long unsigned int>; T = std::atomic<long unsigned int>]':
element.hpp:185:9: required from 'void Element<PRESENT,ABSENT>::Accessor<PRESENCE>::MakePresentImpl(const ARG&) const [with ARG = std::atomic<long unsigned int>; PRESENCE = Cluster<Element<std::atomic<long unsigned int>,Link>,true>::NonLockingPresence; PRESENT = std::atomic<long unsigned int>; ABSENT = Link]'
element.hpp:119:7: required from 'Element<PRESENT,ABSENT>::PresentResult Element<PRESENT,ABSENT>::Accessor<PRESENCE>::MakePresent(const ARG&) const [with ARG = std::atomic<long unsigned int>; PRESENCE = Cluster<Element<std::atomic<long unsigned int>,true>::NonLockingPresence; PRESENT = std::atomic<long unsigned int>; ABSENT = Link; Element<PRESENT,ABSENT>::PresentResult = std::atomic<long unsigned int>&]'
dispenser.hpp:78:5: required from 'Index Dispenser<T>::Insert(const T&) [with T = std::atomic<long unsigned int>]'
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。