• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Dynamiczna tablica obiektów

Aruba Cloud PRO i VPS, Openstack, VMWare, MS Hyper-V
+1 głos
185 wizyt
pytanie zadane 20 kwietnia 2021 w C i C++ przez Dawidziu Bywalec (2,380 p.)
W jaki sposób utworzyć tablicę obiektów na dynamicznej tablicy?

1 odpowiedź

0 głosów
odpowiedź 20 kwietnia 2021 przez j23 Mędrzec (189,140 p.)
edycja 20 kwietnia 2021 przez j23
T* ptr = new T[ilosc];

// lub lepiej
std::vector<T> tab(ilosc);

 

komentarz 20 kwietnia 2021 przez tkz Nałogowiec (41,900 p.)
Nie lepiej użyć vecotra albo smart pointerów?
komentarz 20 kwietnia 2021 przez j23 Mędrzec (189,140 p.)

Lepiej, ale OP pytał o dynamiczną tablicę, więc założyłem, że chodzi mu o new[].

W sumie dopiszę vectora...

komentarz 20 kwietnia 2021 przez NewEraOfPeace Gaduła (4,790 p.)
vectora, jeśli już, lub w zależności od wymagań innego kontenera, ale nie smart pointerów
komentarz 20 kwietnia 2021 przez tkz Nałogowiec (41,900 p.)
Ciekawe, a to dlaczego nie smart pointerów?
komentarz 20 kwietnia 2021 przez Dawidziu Bywalec (2,380 p.)

@j23, dzięki za pomoc. Wiem, że to może głupie pytanie, ale jestem jeszcze początkującym koderem i mógłbyś mi wyjaśnić co jest tutaj obiektem i jak to wszystko wcześniej podefiniować?

komentarz 20 kwietnia 2021 przez tkz Nałogowiec (41,900 p.)
#include <vector>
#include <memory>

class object
{
};

int main()
{
    {
        object *ptr = new object[100];
        delete[] ptr;
    }
    {
        auto objects = std::vector<object>(100);
    }
    {
        auto objects = std::make_unique<object[]>(100);
    }
}

Warto zaznaczyć, że dwa ostatnie zrzucają z Twoich barków odpowiedzialność za czyszczenie pamięci. 

1
komentarz 21 kwietnia 2021 przez j23 Mędrzec (189,140 p.)

@Dawidziu,  

(...) co jest tutaj obiektem (...)?

Instancje klasy T, czyli elementy tablicy wskazywanej przez wskaźnik ptr.

Obiektem jest także tab, który zawiera w sobie obiekty klasy T.

Ciekawe, a to dlaczego nie smart pointerów?

Może dlatego, że taki smart pointer nie zawiera informacji o wielkości tablicy, co jest trochę niepraktyczne, zważywszy, że masz wektora, który oferuje o wiele więcej.

komentarz 21 kwietnia 2021 przez tkz Nałogowiec (41,900 p.)
W porównaniu do vectora - racja. Do new - uniqe_ptr wygrywa. Jednak model RAII pomaga przy nie popełnianiu głupich błędów.

Podobne pytania

0 głosów
2 odpowiedzi 871 wizyt
pytanie zadane 30 grudnia 2020 w C# przez j.cob_21 Początkujący (350 p.)
0 głosów
1 odpowiedź 368 wizyt
pytanie zadane 9 stycznia 2019 w C i C++ przez A$AP_Becari Nowicjusz (170 p.)
0 głosów
1 odpowiedź 536 wizyt

90,303 zapytań

138,899 odpowiedzi

311,089 komentarzy

60,019 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...