Witam,
mam dwie klasy, jedna to pojedyncze zadania, druga posiada vector, który służy do przechowywania tych zadań.
Kiedy przesyłam zadanie w celu dodania do kontenera zadań uruchamiają mi się destruktory pojedynczego zadania, chociaż przesyłam te zadania przez wskaźnik. W dodatku nie wszystkie destruktory uruchamiają się. Dlaczego tak się dzieje :)?
#include <iostream>
#include <vector>
#include <algorithm>
class Task {
public:
const char* newTask;
Task (const char* nT) : newTask(nT) { std::cout << "New Task: " << this->newTask << std::endl; }
Task () {}
~Task () { std::cout << "Destructed Task: " << this->newTask << std::endl; }
};
class Tasks {
public:
std::vector<Task>tasksContainter;
Tasks ();
~Tasks ();
void addTask (Task* t);
void show ();
};
Tasks::Tasks () {
std::cout << "New Task in Tasks" << std::endl;
}
Tasks::~Tasks () {
std::cout << "Destructed Task in Tasks" << std::endl;
}
void Tasks::addTask (Task* t) {
this->tasksContainter.push_back(*t);
}
void Tasks::show () {
for (std::vector<Task>::iterator it = this->tasksContainter.begin(); it != this->tasksContainter.end(); it++) {
std::cout << (*it).newTask << std::endl;
}
}
int main() {
std::cout << "-------------------------------------" << std::endl;
std::cout << "Creating every task" << std::endl;
std::cout << "-------------------------------------" << std::endl;
Task moveUp("moveUp");
Task moveDown("moveDown");
Task moveLeft("moveLeft");
Task moveRight("moveRight");
std::cout << "-------------------------------------" << std::endl;
std::cout << "Creating tasks container" << std::endl;
std::cout << "-------------------------------------" << std::endl;
Tasks justMoves;
std::cout << "-------------------------------------" << std::endl;
std::cout << "Before add tasks" << std::endl;
std::cout << "-------------------------------------" << std::endl;
justMoves.addTask(&moveUp);
justMoves.addTask(&moveDown);
justMoves.addTask(&moveLeft);
justMoves.addTask(&moveRight);
std::cout << "-------------------------------------" << std::endl;
std::cout << "Before show tasks" << std::endl;
std::cout << "-------------------------------------" << std::endl;
justMoves.show();
std::cout << "-------------------------------------" << std::endl;
std::cout << "End" << std::endl;
std::cout << "-------------------------------------" << std::endl;
return 0;
}
W zasadzie to podobna sytuacja zachodzi nawet przy jednej klasie:
#include <iostream>
#include <vector>
#include <algorithm>
class Task {
public:
const char* newTask;
Task (const char* nT) : newTask(nT) { std::cout << "New Task: " << this->newTask << std::endl; }
~Task () { std::cout << "Destructed Task: " << this->newTask << std::endl; }
};
int main() {
std::cout << "-------------------------------------" << std::endl;
std::cout << "Creating every task" << std::endl;
std::cout << "-------------------------------------" << std::endl;
Task moveUp("moveUp");
Task moveDown("moveDown");
Task moveLeft("moveLeft");
Task moveRight("moveRight");
std::cout << "-------------------------------------" << std::endl;
std::cout << "Creating tasks container" << std::endl;
std::cout << "-------------------------------------" << std::endl;
std::vector<Task> taskCont;
taskCont.push_back(moveUp);
taskCont.push_back(moveDown);
taskCont.push_back(moveRight);
taskCont.push_back(moveLeft);
taskCont.push_back(moveUp);
std::cout << "-------------------------------------" << std::endl;
std::cout << "Now show me" << std::endl;
std::cout << "-------------------------------------" << std::endl;
for (std::vector<Task>::iterator it = taskCont.begin(); it != taskCont.end(); it++) {
std::cout << (*it).newTask << std::endl;
}
std::cout << "-------------------------------------" << std::endl;
std::cout << "End" << std::endl;
std::cout << "-------------------------------------" << std::endl;
return 0;
}