taka ciekawostka i pytanie
Jako, że czyszczenie (delete) wskaźnika na void jest niezdefiniowane w c++ - jak zrobić żeby było dobrze
czy pomysł
char *tmpPtr = reinterpret_cast<char *> ptrToVoid;
delete tmpPtr;
jest dobry?
taka ciekawostka i pytanie
Jako, że czyszczenie (delete) wskaźnika na void jest niezdefiniowane w c++ - jak zrobić żeby było dobrze
czy pomysł
char *tmpPtr = reinterpret_cast<char *> ptrToVoid;
delete tmpPtr;
jest dobry?
Zależy od tego jak został przydzielony.
Nie wazne co to by bylo, ale reinterpret_cast
nie jest dobre. Korzystanie ze wskaznikow na void
tez nie jest dobre.
n0name_l napisał(a):
Nie wazne co to by bylo, ale
reinterpret_cast
nie jest dobre. Korzystanie ze wskaznikow navoid
tez nie jest dobre.
Dzięki za odpowiedź
ale to nie ważne - dobre nie dobre
jest taki problem - usunięcie wskaźnika na void - jak to zrobić tak żeby było dobrze
Nie istnieje uniwersalna poprawna odpowiedź na twoje pytanie.
Widze, ze bedziesz torturowac tym pytaniem cala spolecznosc. Sila rzeczy musisz znac sposob utworzenia tego wskaznika, inaczej zapomnij o uzywaniu delete
, np. mozna go stworzyc mniej wiecej tak:
int* x = new int(3);
void* v = (void*)x;
Rzutujesz to z powrotem na int
i delete zadziala normalnie, ale co jesli bedzie utworzony w ten sposob:
int x = 3;
void* v = (void*)&x;
Jeszcze bardziej sie cala sprawa komplikuje jesli mamy tablice, obiekty wlasne, etc. Dlatego tez uzywanie tego typu egzotycznych wynalazkow C++ nie jest wskazane.
void* widziałem w programach pisanych w C. Wykorzystując POSIXowe wątki dane przekazujemy tam przez parametr typu void*, potem rzutujemy i mając odpowiedni typ zwalniamy pamięć.