여기에 CMyString
이라는 클래스에 대해 = 할당을 기본적으로 구현하는 코드가 있으며 코드가 맞습니다.연산자에 대한 C++ 인터뷰
CMyString& CMyString::operator =(const CMyString &str) {
if(this == &str)
return *this;
delete []m_pData;
m_pData = NULL;
m_pData = new char[strlen(str.m_pData) + 1];
strcpy(m_pData, str.m_pData);
return *this;
}
인스턴스는 참조로 전달되며, 첫 번째 'if'는 전달 된 인스턴스가 자체인지 여부를 확인합니다. 내 질문은 : &str
을 사용하여 비교하는 이유는 무엇입니까? str
에 인스턴스의 주소가 이미 포함되어 있지 않습니까? 아무도이 라인이 어떻게 작동하는지 설명 할 수 있습니까?
또한 단지 this
에 개체 주소가 포함되어 있는지 확인하고 싶습니다. 정확합니까? str에 이미되지
제안은 중위는 만들 수는 할당 작업 execption를 저장하기 위해 그것의 더 나은을 추구한다 임시 포인터에서 m_pData 끝에 임시 포인터를 삭제하므로 m_pData = new에 대한 메모리 할당시에도 예외가 발생합니다. char [strlen (str.m_pData) + 1]; 원본 개체 데이터가 안전합니다. CMyString & CMyString :: operator = (const CMyString & str) { if (this == & str) return * this; char * temp = m_pData; m_pData = new char [strlen (str.m_pData) +1]; strcpy (m_pData, str.m_pData); delete [] temp; 임시 = NULL; return * this; } – shivakumar
나는 기능적이지만 예외 처리를하지 않을 것을 생각하고 있었지만 실제로는 내가 여기에 관한 것이 아니지만 ... 어쨌든 – fiftyplus