赋值运算符并不总是被调用

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)

为什么第一种情况导致浅拷贝,而第二种情况导致深拷贝?我假设在第一种情况下正在替换复制构造函数,但不明白为什么.

Naw*_*waz 6

TYPE Element = newElement; <--- TYPE operator= not called, shallow copy

这应该调用copy-constructor,而不是operator=(),因为这不是赋值语句.这是初始化.

  • 初始化调用copy-constructor.在初始化中,构造一个新对象.
  • 作业调用operator=().在赋值中,旧对象使用给定值更新.

那么,你定义了一个拷贝构造函数TYPE吗?