Getters的最佳实践

Best Practice for Getters

本文关键字:最佳 Getters      更新时间:2023-10-16

我知道"best"是相对的,并且随着不同的情况而变化,但为什么要选择通过传递变量而不是指向变量的指针来实现getter呢。既然传递指针通常更快/开销更少,为什么不一直使用指针/引用而不是传递变量呢?我只能看到问题,如果原始变量被删除,那么你会留下空指针,但在类级变量的情况下,这不应该是一个问题,对吧?

示例:

int getNum() {return num}
vs
void getNum(int* toGet) {toGet = num}

使用T getter()T getter() const,除非返回值没有复制/移动构造函数。唯一的例外是显著的性能问题。至于指针,我认为使用void getter(T* pointer)的唯一原因是将POD数据写入预先分配的缓冲区。

当您由于性能原因将要选择void getter(T& value)时,请查看编译器是否执行"返回值优化"以帮助您。在大多数情况下,它确实如此,所以让编译器为您工作就好了。

当您确定RVO不适用于您的情况时,请检查是否经常调用此代码(可能是调用方函数中的性能无关紧要)?

当您可以向任何相关人员提供getter中需要引用或指针的证据时,请使用引用/指针替代方案。如上所述,指针和引用比"按值返回"更不明显,也更难支持。不要因为可以就在代码中添加潜在的错误位置。