fork download
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. class VisualizableVector {
  5. public:
  6. class proxy {
  7. public:
  8. proxy (std::vector<int> *v) : vect (v) {
  9. std::cout << "Before size is: " << vect->size() << std::endl;
  10. }
  11. std::vector<int> * operator -> () { return vect; }
  12. std::vector<int> & operator * () { return *vect; }
  13. ~proxy () { std::cout << "After size is: " << vect->size() << std::endl; }
  14. private:
  15. std::vector <int> * vect;
  16. };
  17.  
  18. VisualizableVector (std::vector<int> *v) : vect(v) {}
  19. ~VisualizableVector () { delete vect; }
  20. proxy operator -> () { return proxy (vect); }
  21. proxy operator * () { return proxy (vect); }
  22. private:
  23. std::vector <int> * vect;
  24. };
  25.  
  26. int main()
  27. {
  28. VisualizableVector vecc (new std::vector<int>);
  29.  
  30. vecc->push_back (10); // 1. Note use of -> operator instead of . operator
  31. vecc->push_back (20); // 2. ok
  32. (*vecc)->push_back (30); // 3. ok
  33. //(*vecc).push_back (40); // 4. error
  34. (**vecc).push_back (50); // 5. ok
  35. //vecc->->push_back (60); // 6. error
  36. }
Success #stdin #stdout 0s 3464KB
stdin
Standard input is empty
stdout
Before size is: 0
After size is: 1
Before size is: 1
After size is: 2
Before size is: 2
After size is: 3
Before size is: 3
After size is: 4