Guest User

Untitled

a guest
May 21st, 2018
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.11 KB | None | 0 0
  1. try
  2. {
  3. set<ArrType*> sHeap;
  4. ArrType* myArr = new ArrType[5];
  5. sHeap.Add(myArr);
  6. someExternalRoutine(myArr);
  7. ...
  8. }
  9. catch(CString s)
  10. {
  11. DeleteAllPointersInMyHeap(sHeap);
  12. throw(s);
  13. }
  14.  
  15. try
  16. {
  17. set<ArrType*> sHeap;
  18. ArrType* myArr = new ArrType[5];
  19. sHeap.Add(myArr);
  20. someExternalRoutine(myArr);
  21. ...
  22. }
  23.  
  24. {
  25. std::vector <ArrType> myArr(5);
  26. someExternalRoutine(myArr);
  27. }
  28.  
  29. std::vector<ArrType>
  30.  
  31. boost::ptr_vector<ArrType>
  32.  
  33. template <class T>
  34. class Garbage
  35. {
  36. std::vector<T *> v;
  37.  
  38. Garbage(const Garbage &);
  39. Garbage operator=(const Garbage &);
  40.  
  41. public:
  42. Garbage() {}
  43.  
  44. ~Garbage()
  45. {
  46. for (std::vector<T *>::iterator i = v.begin();
  47. i != v.end(); ++i) delete *i;
  48. }
  49.  
  50. void swap(Garbage<T> &other)
  51. {
  52. v.swap(other.v);
  53. }
  54.  
  55. T *remember(T *i)
  56. {
  57. v.push_back(i);
  58. return i;
  59. }
  60.  
  61. void forget(T *i)
  62. {
  63. v.erase(std::remove(v.begin(), v.end(), i), v.end());
  64. }
  65. };
  66.  
  67. Garbage<Thing> g;
  68.  
  69. Thing *t1 = g.remember(new Thing());
  70.  
  71. Thing *t2 = g.remember(new Thing());
  72.  
  73. // decide we want to keep t1:
  74. g.forget(t1);
Add Comment
Please, Sign In to add comment