I overloaded my class () statement to use it as a sort sort function. When using std :: sort (), for some reason, it calls the "destructor" class several times (depending on the number of records in the vector, apparently). I described more in ~ RANK ().
#include <stdio.h> #include <stdlib.h> #include <vector> #include <algorithm> class RANK { struct COMBO { int x; }; std::vector<COMBO *> data; public: RANK() { printf("RANK()\n"); } ~RANK() { printf("~RANK()\n"); /* * Here is the problem. * Since my vector consists of pointers to COMBO objects, * I delete them upon RANK object destruction. However, * std::sort() calls RANK destructor many times and * throws some runtime error, unless commented out. */ //for (unsigned int i = 0, n = data.size(); i < n; i++) // delete data[i]; } void Add(int x) { COMBO *combo = new COMBO(); combo->x = x; data.push_back(combo); } unsigned int Size() { return data.size(); } void Sort() { std::sort(data.begin(), data.end(), *this); } int operator[](unsigned int pos) { return data[pos]->x; } bool operator()(COMBO *combo1, COMBO *combo2) { return combo1->x > combo2->x; } }; int main() { RANK rank; rank.Add(1337); rank.Add(9001); rank.Sort(); for (unsigned int i = 0, n = rank.Size(); i < n; i++) printf("%d ", rank[i]); printf("\n"); system("pause"); return 0; }
Output (with commented destructor):
RANK() ~RANK() ~RANK() ~RANK() ~RANK() ~RANK() 9001 1337
source share