Реализация emplace_front в листе
template<typename... Args,typename Alloc=std::allocator<T>>
void emplace_front(Args&&... args) {
Alloc alloc = Alloc() ;
T* d=std::allocator_traits<Alloc>::allocate(alloc, sizeof(T));
std::allocator_traits<Alloc>::construct(alloc, d
,std::forward<Args>(args)...);
//Вставляем d в свой list<T>
std::allocator_traits<Alloc>::destroy(alloc, d);
std::allocator_traits<Alloc>::deallocate( alloc,d, sizeof(T));
}
Имеет ли место быть такая реализация emplace в листе, если нет, то насколько это плохо сделано и к каким серьёзным ошибкам может привезти такая реализация.
Сама вставка
Node* n = new Node(*d);
if (sz == 0) {
n->next = &fakeNode;
fakeNode.pred = n;
n->pred = &fakeNode;
}
else {
n->next = static_cast<Node*>(fakeNode.next);
n->pred = &fakeNode;
fakeNode.next->pred = n;
}
fakeNode.next = n;
sz++;