I have a code snippet like below. I have created some Dynamic memory allocation for my Something class and then deleted them.
The code print wrong data which I expect but why ->show does not crash? 
In what case/how ->show will cause crash? 
Is it possible to overwrite the same memory location of i, ii, iii with some other object? 
I am trying to understand why after delete which frees up the memory location to be written with something else still have information about ->show!
#include <iostream>
#include <vector>
class Something
{
public:
  Something(int i) : i(i)
  {
    std::cout << "+" << i << std::endl;
  }
  ~Something()
  {
    std::cout << "~" << i << std::endl;
  }
  void show()
  {
    std::cout << i << std::endl;
  }
private:
  int i;
};
int main()
{
  std::vector<Something *> somethings;
  Something *i = new Something(1);
  Something *ii = new Something(2);
  Something *iii = new Something(3);
  somethings.push_back(i);
  somethings.push_back(ii);
  somethings.push_back(iii);
  delete i;
  delete ii;
  delete iii;
  std::vector<Something *>::iterator n;
  for(n = somethings.begin(); n != somethings.end(); ++n)
  {
    (*n)->show(); // In what case this line would crash? 
  }
  return 0;
}
 
     
    