std :: unique_ptr尝试进行深层复制时尝试引用已删除的函数

时间:2016-04-12 08:25:07

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

经过全面搜索并且经常挠头,我仍然无法弄清楚这一点。以前没有使用智能指针,矢量。请帮忙。

我正在尝试制作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;
   }

1 个答案:

答案 0 :(得分:0)

m_vectorclassA = fromclassB.m_vectorclassA

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