如何正确实现getter函数?我的意思是返回值。所以:
std::shared_ptr<const number_t> number () const noexcept
{
return std::make_shared<const number_t> (this->m_number);
}
或者像这样(vector::at 风格):
const auto & number () const noexcept
{
return this->m_number;
}
m_number- 自定义类型字段,而不是标准字段。
现在哪个选项被认为是好的风格/更安全/更舒适等?
仅当我们有一个变量位于堆上时才需要智能指针,并且我们需要安全地管理它的生命周期(即,一方面,防止泄漏,另一方面,不要提前销毁这个变量时间;这是“所有权”概念的支点——变量只有在其当前所有者被销毁时才会被销毁)。
在您的情况下,该值不是某种唯一实体,因此创建副本不会有任何问题 - 我们不区分原始编号和副本。因此,您可以随意按值返回值,而无需使用常量引用和指针。
我会告诉你更多——编译器很容易优化返回值。如果它是原始类型,那么它只是简单地写入处理器寄存器;如果不是,则应用 RVO(返回值优化,复制省略的一种特殊情况,我在我的一个答案中写过)。
仅当我们使用实体时才需要通过指针(常规或智能)返回。例如,GUI 控件的副本或游戏世界中的对象已经是与其原始对象无关的新对象。