【问题标题】:std::unique_ptr Attempting to reference a deleted function on trying to make a deep Copystd::unique_ptr 尝试在尝试进行深度复制时引用已删除的函数
【发布时间】:2016-04-12 08:25:06
【问题描述】:

在搜索了很多并挠了挠头之后,我仍然无法弄清楚这一点。以前没有使用过智能指针,向量。请帮忙。

我正在尝试制作 A 类的深层副本,但出现此错误。如果这很重要,错误指向微软的 xutility.cpp 的“模板函数副本”。

classA
{
  public:
     ClassA (const ClassA& origClassA)
     {
         ClassA::Copy(origClassA);
     }

     ClassA & ClassA ::operator=(const ClassA & origClassA )
     {

         if (this != &origClassA )
        {
           ClassA ::Clear();
           ClassA ::Copy(origClassA );
         }

         return *this;
      }

      void ClassA ::Clear()
     {
        m_nId = 0;
        m_pType = nullptr;
      }

      void ClassA ::Copy(const ClassA & fromClassA )
      {
          m_nId = fromClassA .m_nId;

          if (fromClassA.m_pType)
          {
              if (!m_pType)
                m_pType = std::make_unique<int>();
              *m_pType = *fromClassA.m_pType;
           }

       }
   private:
        int m_nId;
        std::unique_ptr<int> m_pType;
   }

Class B
{
  public:
       ClassB(const ClassB& origClassB)
       {
         classB::Copy(origClassB);

       }

       classB& operator=(const classB& fromclassB)
       {
          if (this != &origClassA )
          {
             classB::Clear();
             classB::Copy(origClassA );
          }

          return *this;


       }

       void classB::Clear()
       {
          m_vectorclassA.Clear();
       }

       void Copy(const classB& fromclassB)
        {
            m_vectorclassA = fromclassB.m_vectorclassA;
        }


        void SetVector(const std::vector<std::unique_ptr<classA>>& vectorclassA  )
        {
           std::vector<std::unique_ptr<classA>>::const_iterator Iterator;

           for (Iterator = vectorclassA.begin(); Iterator != vectorClassA.end(); Iterator++)
           {
              m_vectorclassA.push_back(std::make_unique<classA>(*(*Iterator)));
           }
       }

   private:
     std::vector<std::unique_ptr<classA>> m_vectorclassA;
   }

【问题讨论】:

  • m_vectorclassA = fromclassB.m_vectorclassA 这试图进行浅拷贝——它试图复制指针,而不是它们指向的数据。当然,unique_ptr 不能被复制——这就是它“独一无二”的原因。您的意思是从ClassB::Copy 拨打SetVector 吗?
  • m_vectorclassA = fromclassB.m_vectorclassA ** 就是这样。我在实际代码中根本没有看到它,它更长并粘贴了简化代码。谢谢!另外,我并不是要从 ClassB::Copy 调用 **SetVector

标签: visual-c++ stl unique-ptr


【解决方案1】:

m_vectorclassA = fromclassB.m_vectorclassA

是用户 Igor Tandetnik 指出的导致问题的线路

【讨论】:

    猜你喜欢
    • 2017-08-31
    • 2020-05-02
    • 2015-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-01
    • 1970-01-01
    • 2015-05-25
    相关资源
    最近更新 更多