Witam, mam w klasie Zwierze licznik który trzyma dla mnie ilość obiektów klasy. Zainicjowałem mu początkową wartość 0 poza klasą:
class Zwierze {
protected:
static int licznik;
private:
std::string nazwa;
unsigned int masa;
public:
Zwierze(std::string new_name = "Animal", unsigned int new_mass = 1) {
this->nazwa = new_name;
this->masa = new_mass;
licznik++;
std::cout << "Utworzono: " << nazwa << " " << masa << "kg" << std::endl;
std::cout << "Liczba zwierzat: " << licznik << std::endl;
}
~Zwierze() {
std::cout << "Zniszczono obiekt: " << nazwa << " " << masa << "kg" << std::endl;
licznik--;
}
}
int Zwierze::licznik = 0;
Pytanie jest dlaczego kiedy podaję jako argumenty do funkcji globalnej obiekty typu Zwierze to nie odpala się konstruktor, natomiast odpala się destruktor po zakończeniu działania funkcji? Mój wniosek, że nie odpala się konstruktor bierze się z tego że gdy wypisuję sobie zmienną licznik zaraz przed zakończeniem programu wypisuje mi -2 natomiast gdy funkcja bierze wskaźnik, licznik jest prawidłowy równy 0.
std::string if_longer(Zwierze animal1, Zwierze animal2) {
std::string nazwa1 = animal1.getname();
std::string nazwa2 = animal2.getname();
if (nazwa1.length() > nazwa2.length()) {
return nazwa1;
}
else {
return nazwa2;
}
}
Natomiast jeżeli funkcja będzie otrzymywała wskaźniki wszystko działa poprawnie.