原文:https://blog.youkuaiyun.com/luoweifu/article/details/39119487
假设有一个书的类Book,基定义如下:
struct Book
{
string isbn;
string name;
double price;
string author;
};
现在需要这样一个函数:有一个文件存放着一本书的相关信息(ISBN、书名、价格),现要从这个文件中读取信息并赋给Book的对象
方法一:
Book GetBookFromFile(const string& filePath)
{
Book book;
fstream fileInput(filePath);
fileInput >> book.isbn >> book.name >> book.price;
return book;
}
没错,这样定义确实可以,但需要在函数体内声明一个Book的对象,函数返回值的时候会进行一次对象的拷贝。这样增加了一个对象拷贝的过程,使效率降低。
方法二:
void GetBookFromFile(Book* book, const string& filePath);
void GetBookFromFile(Book*& book, const string& filePath);
void GetBookFromFile(Book*& pBook, const string& filePath)
{
if (pBook == NULL)
{
return;
}
fstream fileInput(filePath);
fileInput >> pBook->isbn >> pBook->name >> pBook->price;
}
void GetBookFromFile(Book* pBook, const string& filePath)
{
if (pBook == NULL)
{
return;
}
fstream fileInput(filePath);
fileInput >> pBook->isbn >> pBook->name >> pBook->price;
}
Book* pBook = new Book();
pBook->author = "SimileSunrise";
GetBookFromFile(pBook, "E:\\book.txt");
delete pBook;
当然,我是建议选择第二种方式,因为引用确保了传进来的指针有一个正确的值(引用必须在定义时被初始化)