似乎ifstream*->open
无法正常工作......
以下是代码:(使用g++ 4.7
中的-std=c++11
编译MAC OSX 10.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;
}
任何人都可以告诉我这里有什么问题吗?
答案 0 :(得分:5)
这会在使用时执行new std::ifstream
,而不是每请求2
个值执行一次。
new std::ifstream
创建一个ifstream指针,其指针值由files
构造函数在std::ifstream
中插入两次。
std::vector
仅处理它包含的对象,在这种情况下是ifstream*
指针。因此,2
复制指针值。当files
超出范围时,指针(以及向量中的支持数据)将被处理,但不会指向指针指向的值。因此,vector不会删除新的std::ifstream
对象(放置在向量中两次)。
operator delete
没有为您调用,因为指针可能有很多用途,无法轻易确定。其中之一是将相同的指针放在矢量中两次。