Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

New/delete (zerowanie tablicy)

Ostatnio zmodyfikowano 2017-04-05 15:17
Autor Wiadomość
Anim
Temat założony przez niniejszego użytkownika
New/delete (zerowanie tablicy)
» 2017-04-05 10:18:20
Czy powołanie do życia tablicy dynamicznej przy uzyciu new, gwarantuje, że jest ona wypełniona zerami? Czy muszę dodatkowo użyć pętli bądź malloca?
Oraz drugie pytanie - czy poniższa konstrukcja jest poprawna (i czy może ona gwarantuje wyzerowanie tablicy) ?

C/C++
int * tab = new int[ rozmiar ]();

//cos tam

delete[] tab; //<- czy teraz tak mogę zwalniać tę pamięć?

Dziękuję za odpowiedzi i pomoc :)
P-159787
Monika90
» 2017-04-05 10:50:47
C/C++
int * tab = new int[ rozmiar ]();
Tak, to wyzeruje tablicę, bez tych nawiasów na końcu by tego nie zrobiło.

Ale poza tym to jest to źle, ponieważ należy używać std::make_unique, albo std::vector
P-159788
Anim
Temat założony przez niniejszego użytkownika
» 2017-04-05 10:59:39
Hm... dlaczego źle?

nie mogę używać vectorów, ani STL-a. Potrzebuję użyć pamięci dynamicznej, przy czym na początku - przed użyciem tejże tablicy - muszę wiedzieć, że jest wypełniona zerami. Jak w takim razie to rozwiązać, aby było poprawnie?
P-159789
Saran
» 2017-04-05 11:15:03
@Monika90 Nie zawsze należy używać
std::vector
, właśnie z powodu tego, że wypełnia vector zerami po zmianie rozmiaru, co może być wolniejsze od
new
. Jeśli ktoś operuje na odpowiednio dużych zbiorach danych, do tego potrzebując szybkości, może tego nie chcieć.


@up w takim razie twój kod jest dobry, zerujący tablicę, jak już powiedziała Monika.
P-159790
Monika90
» 2017-04-05 11:40:21
To prawda, vector i make_unique zerują pamięć, co może być kosztowną i niepotrzebną operacją. Wtedy można użyć gołego new.

Natomiast nie ma powodu żeby używać delete zamiast automatycznego zwalniania pamięci przez inteligentny wskaźnik.
P-159792
mokrowski
» 2017-04-05 11:41:14
Operowanie na poziomie gołych wskaźników powinno być wyjątkiem podyktowanym potrzebami. Niestety C++'a uczy się od (Y) strony czyli od "tych wyjątków" czyli na poziomie "C++ to C z klasami". Jak się wie co się robi i jakie kupuje się problemy , można używać surowych wskaźników. Jak się uczysz i żaden "Mooondry wykładofca" Cię nie zmusza, stosuj vector i unique_ptr/shared_ptr. Jak cię zmusza, nie masz wyjścia. Jedynie wiedz że jesteś w 90'tych latach XX wieku.

Poza tym (do cholery) nie optymalizuj przedwcześnie.
P-159793
Anim
Temat założony przez niniejszego użytkownika
» 2017-04-05 11:48:35
hm,hm... no rozumiem. niestety muszę posiłkować się tylko new i delete. Bo zadanie polega na stworzeniu listy jednokierunkowej. Dlatego opieram się na new i delete. Dziękuję za odpowiedzi.
P-159794
mokrowski
» 2017-04-05 11:50:12
@Anim zrobisz jak Ci kazali lub jak chcesz. Niemniej jednak to że masz stworzyć listę nie oznacza że jesteś zmuszony do stosowania gołego new/delete.
P-159795
« 1 » 2
  Strona 1 z 2 Następna strona