Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Kontenery: lista zawierająca listy obiektów klasy

Ostatnio zmodyfikowano 2013-05-05 19:50
Autor Wiadomość
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ć?
P-82038
pekfos
» 2013-05-04 22:23:22
Nie widzę aktualnego kodu, więc strzelam, że dalej przedwcześnie usuwasz obiekty.
P-82057
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:

C/C++
trojkat * k; //tworzę obiekt i dodaję wskaźnik na obiekt do list podrzędnej
( * 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?
P-82063
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.
P-82070
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:

C/C++
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).
P-82130
1 « 2 »
Poprzednia strona Strona 2 z 2