2015-08-28 81 views
1

我想实现几个缓存算法,其中一个可以在运行时替换另一个。C++接口返回一个引用 - 这是一个不好的做法吗?

所以我已经开始与描述的接口:

class ICache 
{ 
    public: 
    virtual ~ICache(){} 
    virtual const std::vector<SomeValue>& getSomeValues() const = 0; 
    virtual const std::vector<AnotherValue>& getAnotherValues() const = 0; 
    ... 
} 

在这里,我的问题是 - 它是一个不好的做法,返回接口的参考?

这样的设计强制执行和暴露类实现它的内部实现(因为它“必须”将所有向量存储为成员)。

有没有更好的方法?

+0

该类本身可以只存储引用或从其他地方按需获取它们。 –

+0

这是一个很好的习惯,返回const引用没有问题,它很有效。 – Melkon

+2

就像你确定的那样,你的缓存类超过了对这些值的任何外部引用,这是非常好的。但是,如果您想在运行时切换缓存类,那么这种情况总是如此。当然,假设你的Cache类在其生命周期结束时对缓存对象进行了尝试。你打算缓存什么样的对象? – MikeMB

回答

1

在这种情况下,我看不到任何返回引用的困难。该接口只是调用者和服务之间的契约。我同意这份合同的性质似乎意味着这样在内部存储数据在缓存方面更好,但并不强制执行;并且从实现的角度来看,它允许一个机制在正确使用时非常有效(而不是强制创建一个新的向量并通过值传递它)。

相关问题