Пример Исходный код, показывающий проблему:
#include<iostream>
#include<deque>
#include<memory>
using namespace std;
class Element
{
public:
Element()
{
fptr = new float[10];
ele1 = 0;
}
~Element()
{
if (fptr != NULL)
delete[] fptr;
}
void print()
{
cout<<"ele1: "<< ele1 <<endl;
for(int i = 0; i != 10; i++)
{
cout<<"ele "<<i<<": "<<fptr[i]<<endl;
}
}
float ele1;
float* fptr;
private:
};
void InsertElement(deque<Element>& dq)
{
Element el;
float* z = new float[10];
for(int i = 0; i != 10; i++)
z[i] = i;
for(int i = 0; i != 10; i++)
el.fptr[i] = z[i];
el.ele1 = 10;
dq.push_back(el);
}
int main(int argc, char* argv[])
{
deque<Element> dq;
cout<<dq.size()<<endl; // check size of the dequeue.
InsertElement(dq); // insert a Element with a buffer of float[10]
dq.front().print();
return 0;
}
Результат выполнения приведенного выше кода:
0
ele1: 10
ele 0: -1.5884e+038
ele 1: -1.5884e+038
ele 2: -1.5884e+038
ele 3: -1.5884e+038
ele 4: -1.5884e+038
ele 5: -1.5884e+038
ele 6: -1.5884e+038
ele 7: -1.5884e+038
ele 8: -1.5884e+038
ele 9: -1.5884e+038
Почему значения не соответствуют ожидаемым, они были изменены внутри функции InsertElement, а dq передается по ссылке. Я не могу понять, что не так с приведенным выше кодом? Очевидно, что ele1, который не является частью массива, получил свое значение, которое было присвоено внутри функции InsertElement, но не множество. массив кажется неинициализированным, хотя мы присвоили ему значения от 0 до 9. Почему такое странное поведение? Пожалуйста, помогите объяснить мне это, я действительно сбит с толку.
Еще одна проблема с кодом: он выдает исключение в конце программы при вызове деструктора класса Element из-за удаления[]. Я исправил раньше, но код как есть вызывает исключение прямо сейчас. Не уверен, почему.