• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Delete statycznych elementów metody

Object Storage Arubacloud
0 głosów
438 wizyt
pytanie zadane 27 sierpnia 2015 w C i C++ przez criss Mędrzec (172,590 p.)
zamknięte 17 listopada 2016 przez criss

Jedna z metod mojej klasy zawiera statyczny vector wskaźników (oczywiście nie pustych :P). Zastanawiam się jak mam w destruktorze klasy wyrzucić z pamięci to, na co wskazują wskaźniki w vectorze Próbowałem w ten sposób:

//to jest wewnątrz destruktora
for(auto i: metoda :: kontener)
            delete i;

No ale tego na pewno kompilator nie łapie (problem oczywiście jest przy metoda::kontener). W google nawet nie wiem jak sformułować mój problem tak w kilku słowach.

komentarz zamknięcia: .

2 odpowiedzi

0 głosów
odpowiedź 27 sierpnia 2015 przez Szykem2 Nałogowiec (29,510 p.)

Rozumiem, że chodzi o usuwanie obiektów, na które pokazują wskaźniki w statycznym vector

Próbowałbym tak:

class foo
{ 
public:
    static vector<void*> vec // przykładowa definicja
}

for (int i = 0; i < foo::vec.size();i++)
{
    delete foo::vec[i];
}

Kod nie przetestowany bo nie mam teraz dostępu do kompilatora

komentarz 27 sierpnia 2015 przez criss Mędrzec (172,590 p.)
Ale mówie - vector jest elementem statycznym metody, nie samej klasy bezpośrednio. Gdyby był po prstu statycznym elementem klasy to w ogóle nie musze używać żadnych operatorów zasięgu (::).
komentarz 27 sierpnia 2015 przez adrian17 Ekspert (344,860 p.)
Po to jest elementem statycznym metosy, żeby nie wychodzić z tej metody. Jeśli uważasz że powinien być czyszczony w destruktorze, to prawdopodobnie jego miejsce należy do tej klasy.
komentarz 27 sierpnia 2015 przez criss Mędrzec (172,590 p.)
Tzn. nie ma możliwości na dostanie się do statycznego elementu funkcji tak samo jak można się dostać do statycznych elementów klasy z poza niej (nawet bez tworzenia obiektu)? Fakt, moge to zrobić całkowicie wenątrz kalsy, ale teraz pytam z czystej ciekawości.
komentarz 27 sierpnia 2015 przez Szykem2 Nałogowiec (29,510 p.)
Uważam tak jak @adrian17 skoro nie używasz go tylko i wyłócznie(wraz z usuwaniem) w jednej metodzie to lepiej zrobić to jako obiekt statyczny klasy a nie konkretnej metody. Nigdzie nie widziałem odwoływania się do takiej zmiennej statycznej i szczrze mówiąc nie mam pojęcia jak możnaby uzyskać do niej dostęp z poza metody.
komentarz 28 sierpnia 2015 przez criss Mędrzec (172,590 p.)
No wlasnie uzywam tylko i wylacznie w jednej metodzie i dlatego wolałem żeby było tak. A w destrktorze z oczywistych powodów chce dynamicznie przydzieloną pamięć usunąć. Ale dobra, nieważne.
0 głosów
odpowiedź 28 sierpnia 2015 przez Sebastian Fojcik Nałogowiec (43,020 p.)
edycja 28 sierpnia 2015 przez Sebastian Fojcik

Pierwszy do głowy wpadł mi taki pomysł. To w czymś pomoże?


class Klasa
{
	vector< int* >::iterator wskaznik_na_wektor;
	int ile_elementow;

public:

	void funkcja() // Ta funkcja powinna być statyczna moim zdaniem
	{
		static vector< int* >wektor;

		wskaznik_na_wektor = wektor.begin();
		ile_elementow = wektor.size();
	}

	~Klasa()
	{
		for( int i = 0; i < ile_elementow; i++ )
		{
			delete * wskaznik_na_wektor;
			wskaznik_na_wektor++;
		}
	}

};

Ponieważ nie ma dostępu do statycznego składnika metody, to trzeba jego adres gdzieś przechować. Najlepiej prywatnie, tylko dla tej klasy. Rozmiaru też nie uzyskamy, więc trzeba zapisać.

Poza tym dziwne rzeczy chcesz zrobić. Masz wektor statyczny, wspólny dla wszystkich obiektów klasy, a po usunięciu JEDNEGO ze STU TYSIĘCY obiektów, zawartość wektora przepada :(((
Ale nie mi dane osądzać. Na pewno wiesz co robisz :-)

komentarz 28 sierpnia 2015 przez criss Mędrzec (172,590 p.)
edycja 28 sierpnia 2015 przez criss
Hmm... Statyczne elementy w metodzie nie są statyczne dla każdej instancji z osobna? Tzn. jeden obiekt - jedna metoda operująca na tym obiekcie - jeden statyczny vector należący konkretnie do tej "instancji" metody.

Ale poradziłem sobie po prostu z vectorem zadeklarowanym w klasie.
komentarz 28 sierpnia 2015 przez Sebastian Fojcik Nałogowiec (43,020 p.)
Hmmm... masz rację. Wektor statyczny w metodzie powinien być statyczny tylko dla jednego obiektu. Wyjątkiem byłaby sytuacja, gdyś zrobił tę metodę statyczną.

Już poprawiony kod :-)
Dzięki.
komentarz 28 sierpnia 2015 przez criss Mędrzec (172,590 p.)
Dzięki za podsunięcie jakiegoś rozwiązania, ale chyba jednak ten vector bezpośrednio w klasie jest bardziej czytelny :D

Podobne pytania

0 głosów
2 odpowiedzi 176 wizyt
pytanie zadane 9 sierpnia 2015 w C i C++ przez criss Mędrzec (172,590 p.)
0 głosów
1 odpowiedź 177 wizyt
pytanie zadane 12 marca 2020 w C i C++ przez amtrax Dyskutant (9,630 p.)
0 głosów
1 odpowiedź 1,362 wizyt
pytanie zadane 5 listopada 2017 w C i C++ przez Jakub 0 Pasjonat (23,120 p.)

92,551 zapytań

141,393 odpowiedzi

319,523 komentarzy

61,936 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...