如果您必須收到一個有效的對象(即您不希望調用者傳遞NULL),那麼請不要使用boost :: shared_ptr。你的第二個例子傳遞了一個「智能指針」的引用......忽略細節,它是一個「指向汽車指針的指針」。因爲它是引用,所以shared_ptr對象不能爲NULL ....但並不意味着它不能有NULL值(即指向「空」對象)。
我不明白爲什麼你會認爲對智能指針的引用會更好 - 調用者函數是否已經使用智能指針?
至於「常量」的含義......你的意思是這樣
bool DAL::loadCar(int id, const Car& car) {}
? 如果是的話,這將會適得其反,您可以向編譯器傳達「汽車」不會改變的事實(但大概您希望它改變!)。
或者你的意思是使函數 「常量」,像
class DAL{
bool loadCar(int id, Car& car) const;
}
?
在後一種情況下,您與編譯器/ API用戶交流,方法「loadCar」不會修改DAL對象。如果這是真的,那麼這樣做不失爲一個好主意 - 不僅它能夠實現一些編譯器優化,而且在「合同」(函數簽名)中指定該函數不會修改DAL通常是一件好事,尤其是如果你在你的代碼中做了這個隱含的假設(這樣你就可以確保這一點是真實的,並且在將來沒有人會以改變「DAL」對象的方式修改「loadCar」函數)
什麼是loadCar應該做的? – sellibitze 2009-10-09 09:35:09
「填充該對象」是什麼意思?我在下面的答案中假設「爲其賦值」有效的「值」。 – 2009-10-09 09:35:46