如果您必须接收一个有效的对象(即您不希望调用者传递 NULL),那么无论如何不要使用 boost::shared_ptr。您的第二个示例传递了对“智能指针”的引用....忽略细节,它是“指向 Car 的指针”。因为它是引用,所以 shared_ptr 对象不能为 NULL.... 但这并不意味着它不能有 NULL 值(即指向“null”对象)。
我不明白为什么您会认为对智能指针的引用会“更好”——调用者函数是否已经使用智能指针?
至于“const”的含义......你的意思是什么
bool DAL::loadCar(int id, const Car& car) {}
? 如果是,那将适得其反,您向编译器传达“汽车”不会改变的事实(但可能您希望它改变!)。
或者你的意思是让函数“const”,比如
class DAL{
bool loadCar(int id, Car& car) const;
}
?
在后一种情况下,您向编译器/API 用户传达方法“loadCar”不会修改 DAL 对象。如果这是真的,那么这样做是个好主意 - 不仅因为它启用了一些编译器优化,而且在“合同”(函数签名)中指定函数不对 DAL 进行任何修改通常是一件好事,特别是如果你在你的代码中做了这个隐含的假设(这样你可以确保这保持真实,并且将来没有人会以改变“DAL”对象的方式修改“loadCar”函数)