#ifndef SAFEARRAY7_H_ #define SAFEARRAY7_H_ #include template class SafeArray { public: SafeArray(); SafeArray(int len); SafeArray(const SafeArray& other); // copy constructor ~SafeArray(); int get_length() const; SafeArray& operator =(const SafeArray& rhs); T& operator [](int i) const; private: int length; T *elements; }; template SafeArray::SafeArray() : length(0), elements(nullptr) {} template SafeArray::SafeArray(int len) : length(len), elements(new T[length]) {} template SafeArray::SafeArray(const SafeArray& other) : length(other.length), elements(new T[length]) { for (int i = 0; i < length; i++) elements[i] = other.elements[i]; } template SafeArray::~SafeArray() { if (elements != nullptr) delete[] elements; } template int SafeArray::get_length() const { return length; } template SafeArray& SafeArray::operator =(const SafeArray& rhs) { if (this == &rhs) return *this; if (elements != nullptr) delete[] elements; length = rhs.length; elements = new T[length]; for (int i = 0; i < length; i++) elements[i] = rhs.elements[i]; return *this; } template T& SafeArray::operator [](int i) const { assert((i >= 0) && (i < length)); return elements[i]; } #endif /* SAFEARRAY7_H_ */