Sma*_*acL 1 c++ constructor variable-assignment
我有一个带有两个函数的模板类,如下所示:
template<class TYPE, class ARG_TYPE>
int MyClassT<TYPE, ARG_TYPE>::Add(ARG_TYPE newElement)
{
TYPE Element = newElement; <--- TYPE operator= not called, shallow copy
'
'
}
Run Code Online (Sandbox Code Playgroud)
和
template<class TYPE, class ARG_TYPE>
void MyClassT<TYPE, ARG_TYPE>::SetAt(int nIndex, ARG_TYPE newElement)
{
,
,
m_pData[nIndex] = newElement; <--- TYPE operator= is called, deep copy
'
'
}
Run Code Online (Sandbox Code Playgroud)
为什么第一种情况导致浅拷贝,而第二种情况导致深拷贝?我假设在第一种情况下正在替换复制构造函数,但不明白为什么.
TYPE Element = newElement; <--- TYPE operator= not called, shallow copy
这应该调用copy-constructor,而不是operator=(),因为这不是赋值语句.这是初始化.
operator=().在赋值中,旧对象使用给定值更新.那么,你定义了一个拷贝构造函数TYPE吗?