Ich muss eine C-Implementierung einer doppelt verknüpften Liste, die unformatierte Zeiger verwendet, in eine Implementierung mit intelligenten Zeigern konvertieren.Konvertieren der verknüpften Liste von unformatierten Zeigern in intelligente Zeiger
Ich habe einige kleine Erfahrung mit intelligenten Zeigern.
Ich arbeite an Umwandlung der insertFirst() -Funktion, um meine Orientierung zu bekommen und zu verstehen, wie dies zusammen kommen wird.
struct node {
int data;
int key;
std::shared_ptr<node> next;
std::weak_ptr<node> prev;
};
void insertFirst(int key, int data){
//create a link
//struct node *link = (struct node*) malloc(sizeof(struct node));
std::shared_ptr<node> link = (std::shared_ptr<node>) malloc(sizeof(struct node));
link->key = key;
link->data = data;
if(isEmpty()){
//make it the last link
last = link;
}else {
//update first prev link
head->prev = link;
}
//point it to old first link
link->next = head;
//point first to new first link
head = link;
}
Im Probleme mit dieser Zeile:
struct node *link = (struct node*) malloc(sizeof(struct node));
dachte ich, wie so tun:
std::shared_ptr<node> link = (std::shared_ptr<node>) malloc(sizeof(struct node));
alles war ich brauchen würde. Aber ich bin weniger vertraut mit C und was genau passiert und warum das nicht erlaubt ist.
ich den Fehler:
no matching conversion for C-style cast from 'void *' to 'std::shared_ptr<node>'
Kann jemand ein paar Tipps und Erläuterungen bieten?
Sie können 'malloc' nicht für' node' verwenden, da es nicht richtig aufgebaut wird, sollten Sie 'std :: make_shared' (oder mindestens' new') verwenden. Btw brauchst du wirklich * geteilte * Zeiger? – Galik
Sie benötigen keine geteilten Zeiger, aber seit der Einführung von C++ 11 ist es professioneller, 'shared_ptr'' weak_ptr' und 'make_shared' anstelle von' new' und 'delete' zu verwenden. –