Когда я спрашиваю, почему вектор удаляет объекты, я не имею в виду механику того, что делает вектор, когда его емкость превышена путем добавления к нему элементов.Я знаю, что как только вектор достигает емкости, первоначально выделенная память удаляется, а затем выделяется новая большая память, чтобы вместить увеличенное количество элементов.Для вектора объектов класса это означает, что будут вызываться деструкторы.
Что мне интересно, так это то, почему именно при попытке доступа к членам моего класса я получаю ошибку «ошибка чтения символов строки» после превышенияемкость моего вектора объекта класса с помощью push_back ().
Я попытался изменить push_back на emplace_back (), но это не помогло.Я заставил его работать, объявив вектор определенного размера и используя at () для присвоения значений, но с этого момента я даже использую вектор для начала?
#include <iostream>
#include <string>
#include <vector>
#include <fstream>
#include <utility>
#include "Book.h"
using namespace std;
int main () {
string holder[5]; //used to hold strings from file.
int temp; //Used to hold number from file.
ifstream infile;
vector<pair<Book, int>> bookInfo;
infile.open(bookDatabase.txt)
//i < 8 because the vector needs to start off holding 8 book objects.
for (int i = 0; i < 8; i++) {
//Second for loop designed based on specific format of the file.
for (int j = 0; j < 5; j++)
getline(infile, holder[j]);
infile >> temp;
infile.ignore() //ignore newline;
//Call class constructor for 5 string inputs.
Book tempBook(holder[0], holder[1], holder[2], holder[3], holder[4]);
//Here is where, in the debugger, I see that the string members of my
//book class all read "error reading characters of string"
bookInfo.push_back(make_pair(tempBook, temp));
//Read in empty line that separates information from book to book.
string tempString;
getline(infile, tempString);
}
infile.close();
return 0;
}
Объект My Book имеет толькостроковые члены и основные функции получения и установки, а также функция, которая печатает основную информацию книги.Он не имеет членов-указателей и отлично работает.
Я также уверен, что создание пар и ввод файла выполняется правильно.
Мне интересно, почему я теряюмоя книга возражает, когда я превышаю векторную емкость.Мне разрешено создавать вектор объектов класса, так почему же нет механизма для сохранения содержимого объектов, когда вектор должен перемещаться в большую память при превышении емкости?Или я что-то не так делаю?