我知道"最好"是相对的,并随着不同的情况而变化,但是为什么人们会选择通过传入变量而不是指向变量的指针来实现getter。由于传递指针通常更快/更少开销,为什么不只是一直使用指针/引用而不是传递变量?我只能看到问题,如果原始变量被删除,那么你将留下空指针,但在类级变量的情况下不应该是一个问题吗?
示例:
int getNum() {return num}
vs
void getNum(int* toGet) {toGet = num}
答案 0 :(得分:1)
使用T getter()
或T getter() const
,除非返回值没有复制/移动构造函数。唯一的例外 - 重大性能问题。关于指针,我认为,使用void getter(T* pointer)
的唯一原因是将POD数据写入预先分配的缓冲区。
当您因性能原因而选择void getter(T& value)
时,请查看编译器是否执行返回值优化以帮助您。在大多数情况下,它确实如此,所以让你的编译器为你工作。
当您确定RVO不适用于您的情况时,请检查是否经常调用此代码(可能性能与呼叫者功能无关)?
当你可以提供证据证明你的吸气剂需要参考或指针时 - 使用参考/指针替代。如上所述,指针和引用比“按值返回”更不明显且难以支持。不要因为可以而在代码中添加潜在的错误位置。