尝试编译此构造函数时出现错误

时间:2021-03-09 17:42:22

标签: c++ constructor atomic stdatomic

我有一个带有构造函数的类,但编译失败并显示错误:

<块引用>

错误:使用已删除的函数'std::atomic::atomic(const 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>, Link>, 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>]'

0 个答案:

没有答案