Мне нужно преобразовать реализацию C из дважды связанного списка, который использует необработанные указатели, вместо реализации с использованием интеллектуальных указателей.Преобразование связанного списка из исходных указателей в интеллектуальные указатели
У меня есть небольшой опыт с умными указателями.
Im работает над преобразованием функции insertFirst(), чтобы понять и понять, как это будет происходить вместе.
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 возникли проблемы с этой линии:
struct node *link = (struct node*) malloc(sizeof(struct node));
Я думал, что делать так:
std::shared_ptr<node> link = (std::shared_ptr<node>) malloc(sizeof(struct node));
все, что мне нужно было. Но я менее знаком с C и что именно происходит и почему это не разрешено.
я получаю ошибку:
no matching conversion for C-style cast from 'void *' to 'std::shared_ptr<node>'
Может кто-нибудь предложить некоторые советы и объяснения?
Вы не можете использовать 'malloc' для' node', потому что он не будет правильно его строить, вы должны использовать 'std :: make_shared' (или, по крайней мере,' new'). Кстати, вам действительно нужны * общие * указатели? – Galik
Вам не нужны общие указатели, но с момента появления C++ 11 более профессионально использовать 'shared_ptr'' weak_ptr' и 'make_shared' вместо использования' new' и 'delete' –