- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
Vector_type(const Vector_type& m1) {
if (this->size != m1.size) {
if (this->size != 0)
destroy_memmory();
this->size = m1.size;
this->M = new m_type[size];
for (int i = 0; i < size; i++)
this->M[i] = m1.M[i];
}
else {
for (int i = 0; i < size; i++)
this->M[i] = m1.M[i];
}
};
Vector_type& operator = (const Vector_type& m1) {
if (this->size != m1.size)
throw "not right =";
for (int i = 0; i < size; i++)
this->M[i] = m1.M[i];
return *this;
};
Действительно что могло пойти не так? просто копировать приравнять, копировать, приравнять, копировать...
cat_code 12.10.2018 13:06 # 0
Steve_Brown 12.10.2018 13:16 # 0
Вот не знаю,
это вызов конструктора копирования, конструктор по умолчанию + присваивание или implementation-defined?
cat_code 12.10.2018 13:23 # 0
Vector_type(const Vector_type& m1) {
if (this->size != m1.size) {
if (this->size != 0)
destroy_memmory();
this->size = m1.size;
this->M = new m_type[size];
for (int i = 0; i < size; i++)
this->M[i] = m1.M[i];
}
else {
for (int i = 0; i < size; i++)
this->M[i] = m1.M[i];
}
};
Vector_type& operator = (const Vector_type& m1) {
if (this->size != m1.size)
"not right =";
*this = Vector_type (m1);
return *this;
}
Steve_Brown 12.10.2018 13:28 # 0
Просто в чем смысл проверки? Типа, один раз создаем вектор нужного размера, и чтобы дальше случайно не присвоить что-то другого размера?
cat_code 12.10.2018 13:36 # 0
Необходимо перегрузить оператор присваивания, так чтобы он делал то же самое что и копирования если размеры одинаковые, ну ладно просто сделаем так-наш новый вектор равен копированию... и в итоге мы имеем бесконечное присваивание)
cat_code 12.10.2018 13:25 # 0
*this = Vector_type (m1);
Steve_Brown 12.10.2018 13:34 # 0
Стоп. Еще ж и в конструкторе использование неинициализированных полей. Которое проходит только потому, что их содержимое не совпадает с корректным size. В дебаге-то все будет работать, поскольку, как правило, память при выделении заполняется специальным значением, а вот в релизе будет рандомно падать.
cat_code 12.10.2018 13:44 # 0
Но вечный цикл всё равно создаётся, до тех пор покуда в куче есть память.
Steve_Brown 12.10.2018 13:52 # 0
cat_code 12.10.2018 14:23 # 0