Привет, я немного потрудился над созданием интерфейса для запуска gnuplot из c ++, и по какой-то причине реализация моего связного списка не удалась.
В приведенном ниже коде отсутствует строка plots->append(&plot)
. Проходя по коду, я обнаружил, что по какой-то причине деструктор ~John()
вызывается сразу после конструктора John()
, и я не могу понять почему.
Приведенный ниже код является урезанной версией, работающей только на Plot*
. Первоначально я сделал связанный список как шаблон класса. И он прекрасно работал как ll<int>
и ll<char*>
, но по какой-то причине он не работает как ll<Plot*>
.
Не могли бы вы помочь мне выяснить, почему это не удается? и, возможно, помочь мне понять, как заставить это работать?
Заранее: спасибо, куча!
// B2S
#include <string.h>
class Plot{
char title[80];
public:
Plot(){ }
};
class Link{
Plot* element;
Link* next;
Link* prev;
friend class ll;
};
class ll{
Link* head;
Link* tail;
public:
ll(){
head = tail = new Link();
head->prev = tail->prev = head->next = tail->next = head;
}
~ll(){
while (head!=tail){
tail = tail->prev;
delete tail->next;
}
delete head;
}
void append(Plot* element){
tail->element = element;
tail->next = new Link();
tail->next->prev = tail;
tail->next = tail;
}
};
class John{
ll* plots;
public:
John(){
plots= new ll();
}
~John(){
delete plots;
}
John(Plot* plot){
John();
plots->append(plot);
}
};
int main(){
Plot p;
John k(&p);
}