Пожалуйста, взгляд на эту программу:конструктор копирования демо (Грохот ... случай 2)
class CopyCon
{
public:
char *name;
CopyCon()
{
name = new char[20];
name = "Hai";//_tcscpy(name,"Hai");
}
CopyCon(const CopyCon &objCopyCon)
{
name = new char[_tcslen(objCopyCon.name)+1];
_tcscpy(name,objCopyCon.name);
}
~CopyCon()
{
if(name != NULL)
{
delete[] name;
name = NULL;
}
}
};
int main()
{
CopyCon obj1;
CopyCon obj2(obj1);
cout<<obj1.name<<endl;
cout<<obj2.name<<endl;
}
Эта программа выходит из строя при выполнении. Ошибка: «Выражение: _BLOCK_TYPE_IS_VALID (pHead-> nBlockUse)»
Если я назначу «Hai», чтобы назвать с помощью оператора назначения, его сбой. Где, когда я использую string func _tcscpy для присвоения имени «Hai», его работа отлично. Может кто-нибудь объяснить, почему так?
Это смешно, как только 10k пользователи репутации отправить ответ к вашей проблеме. И в основном все говорят то же самое. Означает ли это, что вы получаете доступ к знаниям более высокого уровня при достижении репутации 10 000? – DaClown
Вам не нужно проверять значение null перед удалением. передача NULL для удаления - это нормально. –
Почему вы используете '_tcslen' и' _tcscpy' с массивом 'char'? –