[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