Uchwyt do tablicy i destruktor.

0

Joł joł.
Pytanie takie mam. Jeśli w metodzie jakiejś klasy stworzę sobie dynamiczną tablicę 2d (ale taką, że uchwyt do niej nie będzie polem klasy), np podczas wczytywania obrazka z pliku, to czy po zwróceniu jej (tej tablicy) przez wartość (a konkretnie zwróceniu uchwytu) tablica dalej będzie istniała w pamięci programu? Np tam gdzie wywoływałem metodę na rzecz obiektu danej klasy? Co jeśli wyjdę poza obszar zasięgu obiektu? Czy tablica dalej będzie istniała, ponieważ nie zniszczyłem jej przy pomocy delete[] ? Przykład:

int main()
{
for(int i=0;i<1;i++)
{
    Moja_klasa nowy_obiekt;
    int **uchwyt =nowy_obiekt.wczytaj zdjęcie("nagie_cycki.jpg");
    //miejsce 1
}
//miejsce 2
return 0;
}

Czy tablica będzie istniała w miejscu 1 i w miejscu 2? Kiedy zostanie zniszczona? Czy pomimo wyjścia poza pętle for i zniszczeniu obiektu nowy_obiekt tablica dalej będzie istniała w pamięci?

dodanie znacznika <code class="cpp"> oraz tagów - fp

0

Czy tablica będzie istniała w miejscu 1 i w miejscu 2?

W obu będzie istnieć, ponieważ stworzyłeś ją na stercie. Różnica będzie taka, że w miejscu 2 nie będziesz miał dostępu do wskaźnika uchwyt, a co za tym idzie, nie będziesz mógł zwolnić pamięci zajmowanej przez tę tablicę - czyli masz klasyczny wyciek pamięci.

0

Łał. To super. Dzięki. Tzn nie dobrze, ale super, bo już wiem prawie wszystko :D
Prawie wszystko, dlatego kolejne pytanie:

Ponieważ tablica nie jest polem klasy, to w destruktorze nie będę mógł zwolnić pamięci, tak? Bo nie będę miał dostępu do tej tablicy w destruktorze?

0

jak jest polem klasy (wskaźnik) to przecież masz do niej dostęp...

0

No właśnie chodzi o to, że nie jest polem klasy :P Nie jest, bo do tej pory nie było takiej potrzeby, chodziło tylko o zwrócenie wskaźnika. Ale widzę, że trzeba będzie stworzyć jakieś pole wskazujące na tablicę, bo inaczej problem ze zwolnieniem tej pamięci jest. Właśnie o to mi chodziło, dzięki.

1 użytkowników online, w tym zalogowanych: 0, gości: 1