fork download
  1. #include <cstdint>
  2. #include <iostream>
  3.  
  4. class PSBaseObject
  5. {
  6. public:
  7. PSBaseObject() {}
  8. virtual ~PSBaseObject() {std::cout<<"PSBaseObject destructor\n";}
  9.  
  10. virtual void* data() { std::cout<<"PSBaseObject->data()\n"; return this; }
  11. virtual const void* data() const { std::cout<<"PSBaseObject->data()\n"; return this; }
  12. };
  13.  
  14. template<typename T>
  15. class PSObject : public PSBaseObject
  16. {
  17. private:
  18. T* data_;
  19.  
  20. public:
  21. PSObject(T* object) : data_(object) {}
  22. ~PSObject() { delete data_; std::cout<<"PSObject destructor\n";}
  23.  
  24. T* data() { std::cout<<"PSObject->data()\n"; return data_; }
  25. const T* data() const { std::cout<<"PSObject->data()\n"; return data_; }
  26. };
  27.  
  28. typedef struct
  29. {
  30. void* hFileMap;
  31. void* pData;
  32. std::size_t size;
  33. } data;
  34.  
  35. int main()
  36. {
  37. data* info = new data();
  38. PSObject<data>* ptr = new PSObject<data>(info);
  39. ptr->data();
  40. delete ptr;
  41. }
Success #stdin #stdout 0s 3472KB
stdin
Standard input is empty
stdout
PSObject->data()
PSObject destructor
PSBaseObject destructor