выделение памяти в методе класса

213
24 ноября 2017, 07:23
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;
}
Answer 1

В общем случае - да, вполне. Главное, что у вас объект находится в нормальном состоянии после конструктора.

Но! С чего вы решили, что ваш getPtr будет вызван ровно один раз? А при втором его вызове вы получите утечку. Зачем вообще вы выделяете память как new Node[1], а не просто new Node?

И, надеюсь, копирующий конструктор и оператор присваивания написаны корректно (или запрещены)?

READ ALSO
shared_ptr умные указатели

shared_ptr умные указатели

не работает инкрементПодскажите как реализовать инкремент через shared_ptr??

216
Буферизация stdout, работа fflush

Буферизация stdout, работа fflush

Что делает fflush? Многие пишут,что эта функция дает команду ОС сбросить содержимое буфера на дискНо разве этим занимается ОС? Насколько я понял...

246
Помогите поставить заглушку в тесте

Помогите поставить заглушку в тесте

Есть метод, который нужно протестировать:

182
Java, double and float [дубликат]

Java, double and float [дубликат]

На данный вопрос уже ответили:

214