【发布时间】: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