У меня есть следующий класс, который просто оборачивает массив и добавляет с конструктором некоторые элементы к нему:
class myArray {
public:
myArray();
myArray(int a, int b);
myArray(int a, int b, int c);
myArray(myArray&& emplace);
~myArray();
int& operator [](int id);
private:
int *data;
};
myArray::myArray() {
data = new int[1];
data[0] = 0;
}
myArray::myArray(int a, int b) {
data = new int[3];
data[0] = 0;
data[1] = a;
data[2] = b;
}
myArray::myArray(int a, int b, int c) {
data = new int[4];
data[0] = 0;
data[1] = a;
data[2] = b;
data[3] = c;
}
myArray::~myArray() {
std::cout << "Destructor"<<std::endl;
delete[] data;
}
int& myArray::operator [](int id) {
return data[id];
}
myArray::myArray(myArray&& emplace) : data(std::move(emplace.data)) {}
Кроме того, у меня есть второй класс, который содержит вектор элементов первого класса (myArray
).
class Queue {
public:
Queue();
private:
std::vector<myArray> _queue;
};
Queue::Queue {
_queue.reserve(1000);
for(int a = 0; a < 10; a++)
for(int b = 0; b < 10; b++)
for(int c = 0; c < 10; c++)
_queue.emplace_back(a,b,c);
}
Мой вопрос здесь такой: почему деструктор вызывается для элементов myArray в конце конструктора Queue? Объект Queue все еще жив в моей основной программе, но деструктор myArray освобождает выделенную память, и в результате я получаю ошибку сегментации.
Есть ли способ избежать вызова деструктора или, скорее, вызывать его до тех пор, пока в конце времени жизни объектов Queue?