Witajcie. Na ile poniższy kod jest poprawny? Czy w dobry sposob deklaruję tablicę wskazników na obiekty dynamiczne?
Czy dodając element klasy Element do kolejki/listy muszę mieć napisany konstruktor kopiujacy, czy jesli zależy mi na tym, aby w kolejce były trzymane tylko wskazniki, to taki jest mi niepotrzebny?
W podobnym kodzie, tylko duzo bardziej rozbudowanym mam błąd w programie "Double free or corrupt (out)".
Drugie pytanie z innej beczki, to czy w Element wskazniki mogę zamienić na referencję, i to będzie działać tak samo ?
#include <iostream>
#include <list>
using namespace std;
struct Element{
Element* parent;
list<Element*> children;
int value;
Element(Element* parent, int value)
: parent(parent)
, value(value){}
};
void deleteElement(Element *el){
for(Element* child : el->children){
deleteElement(child);
}
cout << "USUWAM " << el->value << endl;
delete el;
}
int main() {
int n = 3;
Element** pointersToElements = new Element*[n+1];
Element* el1 = new Element(nullptr, 1);
Element* el2 = new Element(el1, 2);
el1->children.push_back(el2);
Element* el3 = new Element(el2, 3);
el2->children.push_back(el3);
pointersToElements[el1->value] = el1;
pointersToElements[el2->value] = el2;
pointersToElements[el3->value] = el3;
pointersToElements[el2->value]->children.push_back(new Element(el2, 7));
delete [] pointersToElements; // co własciwie sie stanie ? Znsizcze tablice wskaznikow, czy takze obiekty na ktore wskazuja wskazniki zostana zmienione
deleteElement(el1);
return 0;
}