Aktywne Wpisy
Zawiera treści 18+
Ta treść została oznaczona jako materiał kontrowersyjny lub dla dorosłych.

glaaki +171
#kosmos #polska #technologia #rakiety
widok ziemi z perspektywy pokladu rakiety Bursztyn 2K podczas ostatniego testu. Oficjalnie udalo sie doleciec na wysokosc 101 km
widok ziemi z perspektywy pokladu rakiety Bursztyn 2K podczas ostatniego testu. Oficjalnie udalo sie doleciec na wysokosc 101 km
źródło: bur4 GRuFqkvWQAEHmiT
Pobierz




mam problem bo nie umiem wywołać destruktora. Problem jest opisany tu: http://pastebin.com/uDMq3urd
Dla typu prostego (uint8_t) działa przypisanie zera, dla obiektu klasy (ofc mam kod destruktora) nie, ale nie umiem wywołać destruktora dla tego obiektu. To dość ważne, będę żył bez tego ale z tym byłoby bajeczniej.
data[poz].T::~T();data[i] = T();to nie jest wywołanie konstruktora dla obiektu
data[i]tylkooperator=z domyślnie skonstruowanym argumentem.Tobie pewnie chodziło o tak zwany placement new, czyli
new (data+i) T;data[i].T::T();?
Edit: ale to nie działa.
Po za tym trochę źle ci dałem radę, bo ten operator może przesunąć adres, czyli:
char* data = ...;
T* t = new (data) T;
I tutaj niema jakiejś obligacji że
(char*)t == dataRozmiar wszystkich obiektów w szablonie array znany jest w czasie kompilacji, to znaczy wystarczy płytki konstruktor kopiujący by skopiować zawartość całego obiektu. Dlatego sądziłem, że skoro tak wywołam konstruktor to skonstruowany obiekt umieści pod wskazanym adresem i wszystko będzie ok. Domyślny konstruktor (lub raczej bezparametrowy) mi w zupełności wystarcza, chodzi o wyzerowanie pamięci pól obiektu, czego malloc nie potrafi.
data[i].operator=(T());Domyśla implementacja to przypisanie wszystkich pól.