fork download
  1. #include <iostream>
  2. #include <algorithm>
  3.  
  4. struct nur_zum_testen_t {} nur_zum_testen;
  5.  
  6. template <typename T>
  7. class List {
  8. T * items;
  9. int size, capacity;
  10. public:
  11. List(const List& list);
  12. ~List() { delete[] items; }
  13.  
  14. List(nur_zum_testen_t, T *items, int size, int capacity)
  15. : items(items), size(size), capacity(capacity) {}
  16. };
  17.  
  18. template <class T>
  19. List<T>::List(const List& list) :
  20. capacity(list.capacity),
  21. items(new T[list.capacity]),
  22. size(list.size)
  23. {
  24. try
  25. {
  26. std::copy( list.items, list.items + size, items );
  27. }
  28. catch(...)
  29. {
  30. delete [] items;
  31. throw;
  32. }
  33. }
  34.  
  35. int instances;
  36. struct doofsinn {
  37. doofsinn() { ++instances; }
  38. ~doofsinn() { --instances; }
  39. doofsinn& operator=(doofsinn const&) {
  40. static int doofsinn_counter = 0;
  41. if (++doofsinn_counter % 5 == 0)
  42. throw "Sone";
  43. }
  44. };
  45.  
  46. int main()
  47. {
  48. {
  49. List<doofsinn> l(nur_zum_testen, new doofsinn[10] (), 10, 10);
  50. try { List<doofsinn> l2(l); } catch(...) {}
  51. }
  52. std::cout << instances << " instances still out there ...\n";
  53. }
  54.  
Success #stdin #stdout 0s 3028KB
stdin
Standard input is empty
stdout
0 instances still out there ...