Pytania otagowane jako delete-operator

W języku programowania C ++ operator delete wywołuje destruktor podanego argumentu i zwraca pamięć przydzieloną przez new z powrotem do stosu.




10
Czy to dozwolone?
Czy jest dozwolone, delete this;jeśli instrukcja delete jest ostatnią instrukcją, która zostanie wykonana w tej instancji klasy? Oczywiście jestem pewien, że obiekt reprezentowany przez this-pointer został newutworzony. Myślę o czymś takim: void SomeModule::doStuff() { // in the controller, "this" object of SomeModule is the "current module" // now, if I …



16
Skąd delete [] wie, że to tablica?
W porządku, myślę, że wszyscy zgadzamy się, że to, co dzieje się z następującym kodem, jest nieokreślone, w zależności od tego, co zostanie przekazane, void deleteForMe(int* pointer) { delete[] pointer; } Wskaźnik może być najróżniejszymi rzeczami, więc wykonanie delete[]na nim bezwarunkowego działania jest nieokreślone. Załóżmy jednak, że rzeczywiście przekazujemy wskaźnik …

6
Co robi program Visual Studio z usuniętym wskaźnikiem i dlaczego?
Książka C ++, którą czytałem, stwierdza, że ​​kiedy wskaźnik jest usuwany za pomocą deleteoperatora, pamięć w miejscu, na które wskazuje, jest „zwalniana” i można ją nadpisać. Stwierdza również, że wskaźnik będzie nadal wskazywał tę samą lokalizację, dopóki nie zostanie ponownie przypisany lub ustawiony na NULL. Jednak w programie Visual Studio …

12
Dlaczego nie usuń, ustawiając wskaźnik na NULL?
Zawsze zastanawiałem się, dlaczego automatyczne ustawienie wskaźnika na NULL po usunięciu nie jest częścią standardu. Jeśli zostanie to rozwiązane, wiele awarii z powodu nieprawidłowego wskaźnika nie wystąpi. Powiedziawszy jednak, że przychodzi mi do głowy kilka powodów, dla których norma miałaby to ograniczyć: Występ: Dodatkowa instrukcja może spowolnić deletedziałanie. Czy to …

6
Usuwanie wskaźnika w C ++
Kontekst: Próbuję zawinąć głowę wokół wskazówek, widzieliśmy je kilka tygodni temu w szkole i podczas dzisiejszych ćwiczeń wpadłem na głupiego? problem, może to być dla ciebie bardzo proste, ale mam niewielkie doświadczenie w programowaniu. Widziałem w SO sporo pytań dotyczących usuwania wskaźników, ale wszystkie wydają się być związane z usunięciem …

5
Usuwanie wskaźnika do const (T const *)
Mam podstawowe pytanie dotyczące wskaźników const. Nie wolno mi wywoływać funkcji niebędących składowymi stałymi przy użyciu wskaźnika do stałej. Jednak mogę to zrobić na wskaźniku const: delete p; Spowoduje to wywołanie destruktora klasy, która w istocie jest „metodą” inną niż stała. Dlaczego jest to dozwolone? Czy to tylko w celu …

5
Jak dokonujesz „realokacji” w C ++?
Jak mogę reallocw C ++? Wydaje się, że brakuje tego języka - jest newi deleteale nie ma resize! Potrzebuję tego, ponieważ ponieważ mój program odczytuje więcej danych, muszę ponownie przydzielić bufor, aby go przechowywać. Myślę, że deletestary wskaźnik i newnowy, większy, nie są właściwą opcją.

2
Czy nadal można bezpiecznie usunąć nullptr w c ++ 0x?
W c++03nim jest całkiem jasne, że usuwając wskaźnik NULL nie ma żadnego wpływu. Rzeczywiście, jest wyraźnie stwierdzone, §5.3.5/2że: W obu przypadkach, jeśli wartość operandu delete jest pustym wskaźnikiem, operacja nie ma żadnego efektu. Jednak w obecnym projekcie dla c++0xtego zdania wydaje się być brakuje. W pozostałej części szkicu mogłem znaleźć …


3
Dlaczego destruktor nie jest wywoływany w operatorze kasowania?
Próbowałem wezwać ::deleteklasę operator delete. Ale destruktor nie jest nazywany. I zdefiniowano klasę MyClassktórego operator deletezostał przeciążony. Globalny operator deletejest również przeciążony. Przeciążonej operator deletez MyClasswezwie przeciążonej globalny operator delete. class MyClass { public: MyClass() { printf("Constructing MyClass...\n"); } virtual ~MyClass() { printf("Destroying MyClass...\n"); } void* operator new(size_t size) { …
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.