Вот код, который в основном реализует назначение = для класса с именем 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;
}
Экземпляр передается по ссылке, а первый «если» проверяет, является ли экземпляр переданным сам или нет. Мой вопрос: почему он использует &str
для сравнения, не str
уже содержат адрес экземпляра? Может ли кто-нибудь объяснить, как работает эта линия?
Кроме того, я просто хочу убедиться, что this
содержит адрес объекта: Это правильно?
Предложения, Симметричный сделать операцию присваивания execption SAFTY Его лучше хранить m_pData в временном указателе удаляет указатель temp в конце, чтобы даже исключение происходило при распределении памяти для 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 = новый символ [strlen (str.m_pData) + 1]; strcpy (m_pData, str.m_pData); delete [] temp; temp = NULL; возвращение * это; } – shivakumar
Я знаю, что я думал о том, чтобы положить что-то вроде функционального, но без обработки исключений, но это не совсем то, что я касаюсь здесь ... но спасибо в любом случае – fiftyplus