[C++]引用形参和指针形参的使用场景
在设计函数时,应根据传入参数的值是否会被改变,来决定是使用引用形参还是指针形参。
- 当传入的参数会被改变时,使用指针形参。
- 当传入的参数不会被改变时,使用
const
修饰的引用形参。 - 不应存在纯引用形参。
以下示例来自LevelDB源码:
// Open the database with the specified "name".
// Stores a pointer to a heap-allocated database in *dbptr and returns
// OK on success.
// Stores nullptr in *dbptr and returns a non-OK status on error.
// Caller should delete *dbptr when it is no longer needed.
static Status Open(const Options& options, const std::string& name, DB** dbptr)
{
*dbptr = nullptr;
DBImpl* impl = new DBImpl(options, dbname);
...
if (s.ok()) {
assert(impl->mem_ != nullptr);
*dbptr = impl;
} else {
delete impl;
}
return s;
}