operator delete dla zwykłej zmiennej

0

Cześć. Powtarzam sobie informacje o this w C++ i na wikipedii znalazłem taki przykład:

class Samobojca {
  private int dana;

  public void zabijSie() {
    dana = 1;    // ok
    delete this;
    // dana = 2; // błąd, obiekt juz nie istnieje
  }
}

Więc tak się zacząłem zastanawiać czy jest możliwe, by użyć delete do każdej zmiennej a nie tylko do tej utworzonej operatorem new?
Z powyższego przykładu wnioskuję, że delete może usunąć każdy obiekt (?)
Więc czy mogę zrobić sobie w kodzie:

void main(){
double zmienna = 3;
delete zmienna;
...
}

?

0

Możesz zrobić

delete &zmienna ;

ale przy wyjściu z bloku nastąpi próba ponownego zwolnienia zmiennej zaalokowanej w pamieci automatycznej i będzie boom

0

Nie. Tylko dla wskaźników i to tych zaalokowanych przez operator new. this jest zwykłym wskaźnikiem i jeżeli obiekt został stworzony za pomocą new to można delete this jak najbardziej wywołać. Natomiast wszystkie wywołania delete dla wskaźników, które wskazują na obiekty zaalokowane na stosie czy czegokolwiek innego niż 0, bądź null ptr (dla którego delete nie ma efektu), jest błędem i może spowodować wywalenie się programu.

Samo delete this jest używane w bardzo specyficznych zastosowaniach (np. inteligentne wskaźniki zaimplementowane za pomocą liczenia referencji) i używając tego rozwiązania trzeba bardzo uważać.

0

Więc czy mogę zrobić sobie w kodzie:

void main(){
double zmienna = 3;
delete zmienna;

Tylko po co?
Zmienna może być umieszczona np.w rejestrze, którego nie możesz "zwolnić".

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