fork(1) download
  1. #include <iostream>
  2. #include <cstring>
  3.  
  4. template <typename T>
  5. class Deleter
  6. {
  7. public:
  8. void operator()(T* ptr) const {
  9. std::cout << "freeing memory using 'delete'...\n";
  10. delete ptr;
  11. }
  12. };
  13.  
  14. template <typename T>
  15. class Deleter<T[]>
  16. {
  17. public:
  18. template <typename U>
  19. void operator()(U* ptr) const {
  20. std::cout << "freeing memory using 'delete[]'...\n";
  21. delete[] ptr;
  22. }
  23. };
  24.  
  25. int main()
  26. {
  27. int* pi = new int(7);
  28. char* cp = new char[100];
  29. std::strcpy(cp, "hi there!");
  30.  
  31. Deleter<int> del1;
  32. del1(pi);
  33.  
  34. Deleter<char[]> del2;
  35. del2(cp);
  36.  
  37. std::cout << "\ndone\n";
  38.  
  39. return 0;
  40. }
Success #stdin #stdout 0s 4424KB
stdin
Standard input is empty
stdout
freeing memory using 'delete'...
freeing memory using 'delete[]'...

done