[EDIT 1 - 加入第三指针语法(感谢亚历克斯)]C++ DAL - 返回参考或填充传入参考
您喜欢哪方法,用于一DAL和为什么会出:
Car& DAL::loadCar(int id) {}
bool DAL::loadCar(int id, Car& car) {}
Car* DAL::loadCar(int id) {}
如果无法找到汽车的第一个方法返回null,则第二个方法返回false。
第二种方法会在堆上创建一个Car对象,并填充从数据库查询的数据。据推测(我的C++是非常生锈),这将意味着沿行代码:
Car& DAL::loadCar(int id)
{
Car *carPtr = new Car();
Car &car= *carPtr;
car.setModel(/* value from database */);
car.setEngineSize(/* value from database */);
// etc
return car;
}
由于
谢谢。即使调用者写了“Car&myCar = dal.loadCar(id)”,指针也不会丢失?无论如何,非DAL代码可以删除由DAL创建的内存吗? – ng5000 2009-10-05 13:37:00
如果调用者写下你刚写入的内容“可以”已经释放,否则不需要。你需要调用“删除&myCar;”来做到这一点,虽然..这看起来很奇怪。 – Goz 2009-10-05 14:07:19
栈拷贝甚至可能不会发生:根据编译器和优化,(N)RVO可能会启动并使操作等同于#1。无论如何,当汽车没有找到时抛出异常是必要的。 – 2009-10-05 14:45:48