使用运算符>>用指向ifstream对象的指针

时间:2014-05-12 16:29:13

标签: c++ pointers operators ifstream

为什么在以下代码中指令os->operator>> input错误?不是运算符的返回值>>对象* os?

#include <iostream>
#include <string>
#include <fstream>

using namespace std;

int main()
{
  double input;
  ifstream * os = new ifstream("prova.dat");
  os->operator>> input;
  return 0;
}

2 个答案:

答案 0 :(得分:5)

如果要将>>用作方法,则需要像()一样传递参数,就像普通函数一样。要取消引用它,您应该使用以下两种方式:

os->operator >> (input);

*os >> input;

注意:为什么指针,何时可以使用自动对象或引用。此外,您需要管理已分配的对象并将其释放。

答案 1 :(得分:1)

如果您正在创建指向此类流的指针,那么您可能做错了。

这应该可以正常工作:

int main()
{
  double input;
  std::ifstream os("prova.dat");
  os >> input;
  return 0;
}

因为ifstream已在堆栈上分配,所以当函数完成时它将自动清除,这将关闭底层文件句柄。您错过了明确的delete,您需要在代码中执行相同操作。

如果你需要传递你的流,你可以参考:

double read_double(std::ifstream& stream)
{
  double d;
  stream >> d;
  return d;
}

int main()
{
  std::ifstream os("prova.dat");
  double input = read_double(os);
  return 0;
}