Answer Napisano Październik 24, 2019 Autor Zgłoś Udostępnij Napisano Październik 24, 2019 Witam, mam taki problem, mam powiedzmy taką klasę: class X { int *tab; .... } w destruktorze kasowana jest tablica i nie wiem jak przeciążyć dla tego operator+. Bo gdy stworzę klasę w operatorze +. i zwrócę przez referencje. X& operator+(const X& x2) { X kopia_wyjsciowa; } To wskażnik, na tablicę (*tab) jest pusty. sądze że to spowodu iż przy wyjściu z wywoływany jest destruktor dla kopii, która kasuje tablice. a zwracane jest tylko adres. (Mam błędy w kompilatorze przy odwołaniu do tablicy) Znalazłem sposób aby "kopia_wyjsciowa" zrobić jako "static", ale czy to jest jedyne i słuszne wyjście. Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Trace Napisano Listopad 5, 2019 Zgłoś Udostępnij Napisano Listopad 5, 2019 Bład tkwi w tym, że zwracasz referencję do obiektu tworzonego lokalnie. W chwili, gdy zakończy się działanie wewnątrz przeciążonego operatora, wszystkie obiekty w nim stworzone są usuwane z pamięci i zwrócona referencja wskazuje na nic. Rozwiązaniem tego problemu jest zwrócenie obiektu przez wartość. Twój przeciążony operator powinien wyglądać więc tak: X operator+(const X& x2) { X kopia_wyjsciowa; // operacje sumujące tabilce z this i x2 return kopia_wyjsciowa; } Tylko pamiętaj o prawidłowym skonstruowaniu konstruktora kopijącego, gdyż odgrywa on w procesie przypisania kluczową rolę. Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Answer Napisano Listopad 16, 2019 Autor Zgłoś Udostępnij Napisano Listopad 16, 2019 Dzięki, działa :>, sorry że tak póżno... Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.