fork download
  1. #define NULL nullptr
  2.  
  3. template <class T, class FPTR = void (void *)>
  4. class CSmartPtr
  5. {
  6. public :
  7. // -----------------------------------------------------------------------
  8. // Constructors and Destructor
  9. // -----------------------------------------------------------------------
  10. CSmartPtr()
  11. {
  12. m_TData = NULL;
  13. m_deleter = NULL;
  14. }
  15.  
  16. CSmartPtr(T* TData)
  17. {
  18. m_TData = TData;
  19. m_deleter = NULL;
  20. }
  21.  
  22. CSmartPtr(T* TData, FPTR *deleter)
  23. {
  24. m_TData = TData;
  25. m_deleter = deleter;
  26. }
  27.  
  28. ~CSmartPtr()
  29. {
  30. if (NULL == m_deleter)
  31. {
  32. delete m_TData;
  33. }
  34. else
  35. {
  36. m_deleter(m_TData);
  37. }
  38. }
  39.  
  40. T *const operator-> () const
  41. {
  42. return m_TData;
  43. }
  44.  
  45. //-----------------------------------------------------------------------
  46. // Getter methods
  47. //-----------------------------------------------------------------------
  48. T *const get() const
  49. {
  50. return m_TData;
  51. }
  52.  
  53. void reset(T* TData)
  54. {
  55. if (NULL != m_TData)
  56. {
  57. if (NULL == m_deleter)
  58. {
  59. delete m_TData;
  60. }
  61. else
  62. {
  63. m_deleter(m_TData);
  64. }
  65. }
  66.  
  67. m_TData = TData;
  68. }
  69.  
  70. private :
  71.  
  72. // -----------------------------------------------------------------------
  73. // Private data members
  74. //
  75. // fUnicodeForm
  76. // This is the Unicode XMLCh format of the string.
  77. // -----------------------------------------------------------------------
  78. T *m_TData;
  79. FPTR *m_deleter;
  80. };
  81.  
  82. int main( void )
  83. {
  84. CSmartPtr<char> apbySrcBuff1; // This doesnt work.
  85. CSmartPtr<char, void (void *)> apbySrcBuff; // This works.
  86.  
  87. return true;
  88. }
  89.  
Runtime error #stdin #stdout 0s 3292KB
stdin
Standard input is empty
stdout
Standard output is empty