// BAD: missing copy constructor - double free

#include <iostream>

typedef int T;

class vector {
 public:
  explicit vector(size_t n = 0, T initial_value = 42)
      : size_(n), data_(new T[n]) {
    std::cerr << "constructor" << std::endl;
    for (size_t i = 0; i < n; ++i) data_[i] = initial_value;
  }

  ~vector() {
    std::cerr << "destructor" << std::endl;
    delete[] data_;
  }

#if 0
  vector(const vector &other) : size_(other.size_), data_(new T[size_]) {
    std::cerr << "copy constructor" << std::endl;
    for (size_t i = 0; i < size_; ++i) data_[i] = other.data_[i];
  }
#endif

  size_t size() const { return size_; }
  T *data() { return data_; }

  T operator[](size_t i) const { return data_[i]; }

  T *begin() { return data_; }
  T *end() { return data_ + size_; }

 private:
  size_t size_;
  T *data_;
};

int main(void) {
  size_t n = 10;
  vector v(n);
  vector new_v = v;
  std::cout << new_v.size() << std::endl;
  for (T x : new_v) std::cout << x << std::endl;
}