Answer Napisano Październik 24, 2019 Autor Zgłoś 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
Trace Napisano Listopad 5, 2019 Zgłoś 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
Answer Napisano Listopad 16, 2019 Autor Zgłoś Napisano Listopad 16, 2019 Dzięki, działa :>, sorry że tak póżno... Cytuj
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.