Нахождение проблемы с конструкцией копирования класса - PullRequest
1 голос
/ 24 марта 2011

У меня проблема с одним из моих заданий на c ++. Это больше вопрос теории. Вот код:

//a class implementation
class IntArrays {
public:
   IntArrays(int n): data(new int[n]), size(n) { }
   ~IntArrays() { delete[] data; };
   const int& operator[](int n) const
      { return data[n]; }

   IntArrays(const IntArrays& ar):
      data(new int[ar.size]),
      size(ar.size) {
      std::copy(data, data + size, ar.data);
   }

private:
   int* data;
   int size;
};

//a driver
int main()
{
    IntArrays a(100);
    IntArrays b = a;   // Problem!
      return 0;
}

In 1-2 sentences, explain why the second line of the driver program is problematic.

Я действительно не знаю, что за ошибка во второй строке драйвера, потому что, когда я запускаю его, все нормально. Сначала я подумал, что это потому, что оператор = не был перегружен, но IntArrays b = a использует конструктор копирования, так что это не так. Я полностью сбит с толку, пожалуйста, помогите. Это очень беспокоит меня, если я не получу ответ.

спасибо заранее.

1 Ответ

4 голосов
/ 24 марта 2011

Вы копируете неправильный путь.

std::copy(data, data + size, ar.data);

Должно быть:

std::copy(ar.data, ar.data + size, data);
...