C++ 将更新源作为引用成员而不是将其传递给更新函数的利弊是什么?

C++ 将更新源作为引用成员而不是将其传递给更新函数的利弊是什么?,c++,C++,我有一个类,它的实例完全依赖于一个单独类实例的更新。 简化示例: #include "Source.h" class ObjectThatNeedsUpdates { public: ObjectThatNeedsUpdates(); void update(const Source& source) { //Update member data with data from source } private:

我有一个类,它的实例完全依赖于一个单独类实例的更新。 简化示例:

#include "Source.h"

class ObjectThatNeedsUpdates
{
public:
    ObjectThatNeedsUpdates();
    void update(const Source& source)
    {
        //Update member data with data from source
    }
private:
    //Some member data that needs updating
};
如您所见,每次调用update函数时,都会传递源类的const引用。但最近我认为,如果在构造需要更新的对象时只将引用传递给源对象一次,并让类将引用存储为成员,可能会更符合逻辑,以避免每次更新对象时都必须传递源

因此:

#include "Source.h"

class ObjectThatNeedsUpdates
{
public:
    ObjectThatNeedsUpdates(const Source& source)
      : source_(source)
    {
    }
    void update()
    {
        //Update member data with data from source_
    }
private:
    const Source& Source_;
    //Some member data that needs updating
};

这种方法的优缺点是什么?

尽你所能表达
update()
调用方和类本身之间的契约

如果需要补充日期的
对象的生存期始终包含在
对象的生存期内,并且要使用的
对象永远不会改变,那么我觉得持有对
对象的引用是合同的最佳表达

但是,考虑持有<代码> STD::SysDypPTR < /代码>。这样可以更好地保护你免受终身困扰


就性能而言,将引用作为参数传递给函数非常便宜(与传递指针的成本相同,而传递指针的成本通常与传递
大小\u t
的成本相同)。

首先,利弊对比什么方法?同样,这样的问题可以被认为是基于意见的。您对这种方法有什么特别的担心吗?每当您考虑使用引用数据成员时,您几乎总是最好使用指针数据成员。使用引用数据成员将禁用编译器生成的赋值,并且通常不可能自己正确地实现它们。类似的推理适用于使用
const
数据成员。通常最好将它们实现为
private
const
数据成员,并通过接口保持不变性。参考参数在内部封装方面可能更优雅一些:只有
update()
方法需要这样做无需将其作为其他方法的成员公开。无需担心
源代码的更改
。性能差异(与构件相比)可以忽略不计。然而,如果你使用一个成本高昂的
共享\u ptr
,你首先会与你自己的动机相矛盾…@我认为指针和引用在性能方面几乎没有区别?@cigien你认为什么方法?也许是我在问题中提出的问题?没有考虑到可能出现的终身问题。谢谢,我会把它改成共享的