Я только начинаю изучать C++, исходя из фона C#.Инициализация потока в конструкторе
Я создаю класс, который будет анализировать данные CSV, и я хочу, чтобы класс был инициализирован либо файловым путем, либо потоком. Если передан путь к файлу, _str_in
должен быть установлен на вновь открытый ifstream
.
Мой код ниже компилирует, но дает предупреждение о втором конструкторе. «Элемент ссылки инициализируется временным, который не сохраняется после выхода конструктора». Я предполагаю, что это предупреждение относится к следующему:
ifstream
создается и_str_in
устанавливается для ссылки на него- память назначен
ifstream
освобождается после того, как конструктор выходит _str_in
теперь указывает на непредставленных выделенной памяти и может стать поврежденной.
Я пробовал разные способы выполнения этого и проверял многие вопросы, но я был в тупике — любые предложения?
class TokenParser
{
std::istream& _str_in;
char _delim;
public:
TokenParser::TokenParser(std::istream& str_in, char delim) : _str_in(str_in), _delim(delim)
{
}
TokenParser::TokenParser(std::string& file_path, char delim) : _str_in(std::ifstream(file_path)), _delim(delim)
{
}