Nachdem ich alles durchsucht und mich viel am Kopf gekratzt habe, kann ich das immer noch nicht herausfinden. habe lange nicht intelligente Zeiger, Vektoren verwendet. Bitte helfen Sie.std :: unique_ptr Versuch, eine gelöschte Funktion zu referenzieren, wenn man versucht, eine tiefe Kopie zu erstellen
Ich versuche, tiefe Kopie der Klasse A zu machen, und ich bekomme diesen Fehler. Der Fehler verweist auf "Template Function Copy" von xutility.cpp von Microsoft, wenn dies wichtig ist.
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' Diese versucht, eine flache Kopie zu machen - es versucht, um Zeiger zu kopieren, nicht die Daten, auf die sie zeigen. Natürlich kann 'unique_ptr' nicht kopiert werden - das macht es" einzigartig ". Wolltest du 'SetVector' von' ClassB :: Copy' aufrufen? –
** m_vectorclassA = fromclassB.m_vectorclassA ** Das war es. Ich habe es in meinem eigentlichen Code nicht gesehen, der viel länger ist und den vereinfachten Code eingefügt hat. Vielen Dank! Außerdem wollte ich nicht ** SetVector ** von ** ClassB :: Copy ** nennen. – user2832424