template<class T>
class LinkedList
{
public:
struct Node //узел
{
public:
...
private:
T _value;
Node *_next;
Node *_prev;
};
class Iterator :public std::iterator<std::bidirectional_iterator_tag, T>
{
public:
...
private:
Node *node;
...
};
private:
Node *_head;
Node *_ptr;
};
здравствуйте. вопрос такой. законно выделять память для _ptr не в конструкторе а в методе? при этом в деструкторе память освобождать? вот так:
template<class T>
LinkedList<T>::LinkedList()
{
_head = new Node[1];
_ptr = nullptr;
_head->_value = T();
_head->_next = nullptr;
_head->_prev = nullptr;
}
template<class T>
LinkedList<T>::~LinkedList()
{
delete[]_head;
delete[]_ptr;
}
template<class T>
typename LinkedList<T>::Node *LinkedList<T>::getPtr(T value, Node *next, Node* prev)
{
_ptr = new Node[1];
_ptr->_value = value;
_ptr->_next = next;
_ptr->_prev = prev;
return _ptr;
}
В общем случае - да, вполне. Главное, что у вас объект находится в нормальном состоянии после конструктора.
Но! С чего вы решили, что ваш getPtr
будет вызван ровно один раз? А при втором его вызове вы получите утечку. Зачем вообще вы выделяете память как new Node[1]
, а не просто new Node
?
И, надеюсь, копирующий конструктор и оператор присваивания написаны корректно (или запрещены)?
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
не работает инкрементПодскажите как реализовать инкремент через shared_ptr??
Что делает fflush? Многие пишут,что эта функция дает команду ОС сбросить содержимое буфера на дискНо разве этим занимается ОС? Насколько я понял...