Я пытаюсь удалить дубликаты из связанного списка и столкнулся с проблемой, которая, вероятно, очевидна и понятна, но я не использовал C++ в течение многих лет, и я не мог узнать, что я делаю неправильно, чтение подобных вопросов на SO.
Ниже приведены части моего кода. Я удалил ненужные части (например, конструкторы, другие методы и т.д.).
template<class T>
class Node {
  Node() : data(NULL), next(NULL), prev(NULL) {}
  explicit Node(T d) : data(d), next(NULL), prev(NULL) {}
  explicit Node(T d, Node<T> *nxt, Node<T> *prv) : data(d), next(nxt),    prev(prv) {}
  ~Node() { delete next; delete prev; }
  T data;
  Node *next;
  Node *prev;
};
template<class T>
class LinkedList {
  LinkedList() : head(NULL) {}
  explicit LinkedList(Node<T> *head_node) : head(head_node) {}
  LinkedList& operator=(const LinkedList ©_list);
  ~LinkedList(); //didn't implement this but I guess delete head is all?
  Node<T>* head;
};
template<class T>
LinkedList<T> RemoveDuplicates(const LinkedList<T> &linked_list) {
  //my = overload creates a whole new list with the same data as the original one
  LinkedList<T> result = linked_list; 
  Node<T> *cur = result.head;
  Node<T> *prev = NULL;
  while (cur) {
    if (...) { //duplicate found  
      Node<T> *temp = cur;
      prev->next = cur->next;
      cur = cur->next;
      cur->prev = prev;
      free(temp); //Here is my problem!!!
    }
    else {
      prev = cur;
      cur = cur->next;
    }
  }
  return result;
}
Итак, сначала я сделал delete temp, и я получил Segmentation fault. Тогда я понял, что вы только delete, что вы new. Достаточно справедливо, но я new вводя каждый Node при построении всего списка в main:
Node<char> *h = new Node<char>('H'); //I have a constructor to handle this
Node<char> *e = new Node<char>('E');
Node<char> *l1 = new Node<char>('L');
Node<char> *l2 = new Node<char>('L');
Node<char> *o = new Node<char>('O');
h->next = e;
h->prev = NULL;
e->next = l1;
e->prev = h;
//and so on
Итак, почему мне не разрешено delete что-то, что было new ed где-то еще? Это потому, что он был new ed за пределами текущей области?
Во-вторых, free пространство работает отлично, но, очевидно, это не так, потому что я не malloc, а new ed!
Что я делаю неправильно? Как правильно удалить удаленный файл node?
Edit1: сделал это более наглядным в соответствии с ответами на мой пост Edit2: добавлено правило из 3 методов
