我想就向函数/方法传递参数的惯例进行探讨,这与IT技术有关。我知道这是一个常见问题,并且已经被回答了很多次,但是我搜索了很多,没有找到完全满意我的答案。
按值传递显而易见,我不会再提及此点。我的建议如下:
- 通过非const引用传递,表示对象会被修改
- 通过const引用传递,表示对象会被使用
- 通过指针传递,表示将存储对对象的引用,是否传递所有权取决于上下文。
这似乎是一致的,但是当我想选择堆分配对象并将其传递给第2个参数时,它会像这样:
void use(const Object &object) { ... }
//...
Object *obj = getOrCreateObject();
use(*obj);
或者
Object &obj = *getOrCreateObject();
use(obj);
这两个选项对我来说都很奇怪。你有什么建议吗?
PS:我知道应该避免使用裸指针,而应该使用智能指针(更容易的内存管理和所有权表达),这可能是我正在工作的项目重构的下一步。
*obj = get()
还是&obj = *get()
? - PKuaObject &obj = *getOrCreateObject();
将不是一个好选择,因为函数可以合法地返回一个空指针,这样您就会得到无效的引用。如果该函数不应返回空指针值,则返回指针而不是引用没有任何意义。 - user7860670Object &obj = getOrCreateObject();
对吗? - PKua