我想将FILE *传递给另一个函数。在此函数中,使用fread从文件中读取一些字节。没有写作。
我想知道我是否应该说
void DoSomething(FILE *uFile)
或
void DoSomething(const FILE *uFile)
我害怕在某处引入内存泄漏,并认为const可能更安全。 我担心当我不正确地传递它时,该函数可能会创建该文件的副本。
我像这样创建FILE *:
FILE *outfile = fopen("c:\\myfile.dat", "wb");
谢谢。
答案 0 :(得分:4)
无论您将FILE*
传递给哪个功能,最终都会调用fread
/ fscanf
/ fwhatever
的某些变体。如果你看,所有这些函数都采用(非常量)FILE*
。
您需要准备好为这些功能提供所需的功能。如果他们原型化采用非const参数,并且您尝试给它们一个const参数,那么您将收到编译器警告。
出于这个原因,我会传入一个非常量FILE*
答案 1 :(得分:1)
当您将指针作为参数传递给该对象时,C ++永远不会复制对象。 Const不在那里做关于复制的声明,它是关于修改的声明。所以你不必担心泄漏。正如其他人所指出的那样,所有采用FILE*
的函数都将其视为非常数,所以无论如何你只需将其抛弃。
答案 2 :(得分:0)
你可以选择:
void DoSomething(const FILE *uFile)
没有创建文件重复。