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) ? int * tab = new int[ rozmiar ]();
delete[] tab;
Dziękuję za odpowiedzi i pomoc :) |
|
Monika90 |
» 2017-04-05 10:50:47 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 |
|
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? |
|
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. |
|
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. |
|
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. |
|
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. |
|
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. |
|
« 1 » 2 |