程序员面试题精选100题(30)-赋值运算符重载函数[C/C++/C#]

面试题 时间:2019-09-22 手机网站
&str)
  • {
  • if(this != &str)
  • {
  • CMyString strTemp(str);
  • char* pTemp = strTemp.m_pData;
  • strTemp.m_pData = m_pData;
  • m_pData = pTemp;
  • }
  • return *this;
  • }
  • 在这个函数中,我们定义一个临时实例strTemp,并把strTempm_pData指向当前实例(*this)的m_pData。由于strTemp是个局部变量,但程序员运行到if的外面是也就出了的该变量的域,就会自动调用strTemp的析构函数,就会把strTemp.m_pData所指向的内存释放掉。由于strTemp.m_pData指向的内存就是当前实例之前m_pData的内存。这就相当于自动调用析构函数释放当前实例的内存。如果新增加指针成员变量,我们只需要在析构函数里正确地释放,而不需要对赋值运算符函数做任何修改。