Usunięcie instancji i stworzenie nowej

Odpowiedz Nowy wątek
2011-08-12 16:38
Pytający
0

Witam,
mam napisaną klasę MojKlasa
mam do niej publiczny wskaźnik

MojaKlasa* instancja;

tworzę instancję

instancja = new MojaKlasa();

i teraz w pewnym momencie działania programu potrzebuję usunąć obecną instancję, a w jej miejsce stworzyć nową,
niestety coś takiego:

delete instancja;
instancja = new MojaKlasa();

powoduje mi "Naruszenie ochrony pamięci" i program się wywala.
samo delete oczywiście działa,
samo utworzenie nowej instancji (bez delete'a) oczywiście powoduje wyciek.

W jaki sposób mogę więc tego dokonać?

Pozostało 580 znaków

2011-08-12 16:47
Pytający
0

Poprawka:
delete jednak wywala mi ten błąd, tylko jeszcze nie wiem dlaczego :/

A możesz pokazać twój kod a nie tylko przykład? - ujemny 2011-08-12 16:51

Pozostało 580 znaków

2011-08-12 17:18
msm
0

Błąd musisz mieć gdzieś indziej, bo samo usunięcie zaalokowanego obiektu nie powinno mieć takich konsekwencji (chyba że masz nietrywialny destruktor).
Najprawdopodobniej IMO dwa razy usuwasz ten sam obiekt - może dwa razy wykonuje się ten fragment kodu, albo usuwasz go też gdzieś indziej?

Pozostało 580 znaków

2011-08-14 08:57
0

Prawdopodobnie gdy kasujesz obiekt to albo:

  • obiekt już nie istnieje bo go skasowałeś gdzieś wcześniej
  • obiekt jest używany

Pozostało 580 znaków

2011-08-14 09:32
0

Na 99% obiekt jest już skasowany i stąd ponowny delete powoduje fikołka.
Ale innaczej zrób-skoro potrzebujesz nową instancję,to jest to samo,jakbyś napisał sobie funkcję w klasie resetującą ją do takiego stanu jak tuż po new.Oszczędzisz dzięki temu na wywoływaniu new/delete oraz przy okazji będziesz miał pewność,że nigdzie w kodzie nadmiarowo sobie obiektu nie skasujesz.


"Sugeruję wyobrazić sobie Słońce widziane z orbity Merkurego, a następnie dupę tej wielkości. W takiej właśnie dupie specjalista ma teksty o wspaniałej atmosferze, pracy pełnej wyzwań i tworzeniu innowacyjnych rozwiązań. Pracuje się po to, żeby zarabiać, a z resztą specjalista sobie poradzi we własnym zakresie, nawet jeśli firma mieści się w okopie na granicy obu Korei."
-somekind,
konkretny człowiek-konkretny przekaz :]

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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