Dzień dobry. Dzisiaj na zajęciach nauczyciel pokazywał przykłady z kopiowaniem obiektów, w tym taki:
#include <iostream>
#include <string>
#include <windows.h>
class Osoba
{
public:
Osoba()
{
this->imie = NULL;
}
Osoba(const Osoba & osoba)
{
this->imie = NULL;
this->SetImie(osoba.imie);
}
~Osoba()
{
Clean();
}
void SetImie(char *imie)
{
Clean();
this->imie = new char[strlen(imie) + 1];
strcpy(this->imie, imie);
}
char * GetImie()
{
return this->imie;
}
private:
char * imie;
void Clean()
{
if (imie != NULL)
delete imie;
imie = NULL;
}
};
int main()
{
Osoba osoba;
osoba.SetImie("JAN");
std::cout << osoba.GetImie() << std::endl;
{
Osoba kopia;
kopia = osoba;
std::cout << "kopia: " << kopia.GetImie() << std::endl;
}
return 0;
}
Stwierdził, że kod klamrach w mainie nie zadziała, chyba że zdefiniujemy operator przypisania. No to do klasy dodałem taki kod:
Osoba & operator =(const Osoba & ref)
{
return *this;
}
po uruchomieniu programu niestety wyrzuca błąd "read access violation. _First was nullptr.". W debuggerze znalazłem, że 'imie' dla obiektu 'kopia' jest równe NULL. W związku z tym mam pytanie, co z tym kodem jest nie tak? Czy to źle zdefiniowany operator przypisania czy może coś z konstruktorem kopiującym?