gpt4 book ai didi

C++ ifstream 指针打开文件失败

转载 作者:搜寻专家 更新时间:2023-10-31 00:42:01 25 4
gpt4 key购买 nike

似乎 ifstream*->open 没有像我预期的那样工作...这是代码:(使用 MAC OSX 10.7 中的 -std=c++11 使用 g++ 4.7 编译)

#include <string>
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
int main(int argc, char** argv)
{
string line;
vector<string> fname = {"a.txt","b.txt"};
vector<ifstream*> files ( 2, new ifstream );

files[0]->open( fname[0] );
getline( *files[0], line, '\n');
cerr<<"a.txt: "<<line<<endl;
//this one prints the first line of a.txt

line.clear();

files[1]->open( fname[1] );
getline( *files[1], line, '\n');

cerr<<"b.txt: "<<line<<endl;
//but this one fails to print any from b.txt
//actually, b.txt is not opened!

return 0;
}

谁能告诉我这里出了什么问题???

最佳答案

这会在使用的地方执行一次 new std::ifstream,而不是对您请求的每个 2 值执行一次。

new std::ifstream 创建一个 ifstream 指针,其指针值由 std::ifstream 构造函数在 files 中插入两次.

std::vector 只处理它包含的对象,在本例中是 ifstream* 指针。因此,2 复制指针值。当 files 超出范围时,会处理指针(和 vector 中的支持数据),但不会处理指针指向的值。因此,vector 不会删除您的新 std::ifstream 对象(两次放置在 vector 中)。

operator delete 不是为您调用的,因为指针可以有许多不容易确定的用途。其中之一是故意两次将相同的指针放入 vector 中。

关于C++ ifstream 指针打开文件失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12464273/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com