0
私の頭の中を何度も探し回って、私はまだこれを理解することができません。スマートポインタを使用していません。助けてください。std :: unique_ptr深いコピーを作成しようとすると、削除された関数を参照しようとしています
クラスAのディープコピーを作成しようとしていますが、このエラーが発生しています。このエラーは、Microsoftのxutility.cppの "Template Function Copy"を参照してください。
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 **を呼び出すつもりはありませんでした。 – user2832424