borgaz Temat założony przez niniejszego użytkownika |
» 2013-05-04 20:23:27 Skoro powinienem używać wskaźników, gdzie więc może być błąd w kodzie, który umieściłem? Czemu nie chce działać? |
|
pekfos |
» 2013-05-04 22:23:22 Nie widzę aktualnego kodu, więc strzelam, że dalej przedwcześnie usuwasz obiekty. |
|
borgaz Temat założony przez niniejszego użytkownika |
» 2013-05-04 23:23:47 Kod właściwie się nie zmienił, więc wygląda tak jak w pierwszym poście. Jeśli chodzi o obiekty, to w takim razie kiedy te obiekty usuwać, bo jak rozumiem, robiąc listę list wskaźników na obiekty, potrzebuję te obiekty już mieć w pamięci i potem odwołując się do nich one wciąż muszą w pamięci być, więc robiąc tak: trojkat * k; ( * it1 ).push_back( k = new trojkat() ); delete k;
otrzymuję listę wskaźników do pustych obszarów, dobrze mówię? Jeśli tak, to jak osiągnąć list wskaźników, bo nie mam kompletnie pomysłów, a myślę już nad tym dwa dni? |
|
Monika90 |
» 2013-05-05 10:20:56 otrzymuję listę wskaźników do pustych obszarów, dobrze mówię?
|
Dużo gorzej, otrzymujesz listę wskaźników do zupełnie-nie-wiadomo-czego. Abstrakcyjnych klas nie można trzymać w kontenerze przez wartość, trzeba przez wskaźnik. Kiedy obiekty nie będą ci już potrzebne, to musisz je zniszczyć wywołując delete dla każdego wskaźnika w kontenerze. Warto wiedzieć, że istnieją alternatywy do ręcznego niszczenia obiektów: inteligentne wskaźniki (np. std::unique_ptr), albo boost pointer containers. I nie zapomnij o wirtualnym destruktorze w klasie podstawowej. a kwadrat dziedziczy po czworokat.
|
Błąd projektowy. |
|
borgaz Temat założony przez niniejszego użytkownika |
» 2013-05-05 19:50:47 Co do kwadratu dziedziczącego po czworokącie, to nie jest to mój pomysł, ale treść zadania. Tak po prostu mam to zrealizować. Natomiast jeśli chodzi o obiekty, to muszę je gdzieś przechowywać. Zrobienie pętli, która za każdym razem tworzy przy pomocy new obiekt k i wrzuca wskaźnik do listy i następnie usuwa obiekt k korzystając z delete, nie jest zatem, jeśli dobrze myślę, dobrym pomysłem. Postanowiłem zrobić dodatkowe listy zawierające obiekty, żeby móc je gdzieś gromadzić, a potem usunąć. Fragment odpowiedzialny za utworzenie obiektu: trojkat * k; Trojkaty.push_back( *( k = new trojkat() ) ); delete k; list < trojkat >::iterator it = Trojkaty.end(); it--; ( * it1 ).push_back( &( * it ) );
Wydaje mi się to głupim rozwiązaniem, bo w tym momencie dubluję rozwiązanie dostępu do obiektu, ale w treści zadania mam zrobić listę list obiektów. Jeśli ktoś ma inną propozycję rozwiązania problemu przechowywania obiektów, to proszę o propozycje(oczywiście nie w postaci gotowego kodu, ale słownego pomysłu). |
|
1 « 2 » |