// Run this through valgrind to see the horribleness

class BadCopy {
 public:
  BadCopy() {
    arr_ = new int[5];
  }

  /*
   * Default copy constructor:
   *   equivalent to
   *   this->arr_ = rhs.arr_
   *
   * This is bad! Especially
   * with how we're using it below!
   */

  ~BadCopy() {
    delete [] arr_;
  }

 private:
  int *arr_;
};

int main(int argc, char** argv) {
  BadCopy * bc1 = new BadCopy;
  BadCopy * bc2 = new BadCopy(*bc1);

  delete bc1; // bc2 now holds a dangling pointer
  delete bc2;

  return 0;
}