繁体   English   中英

带有Boost shared_ptr的const正确性

[英]const correctness with boost shared_ptr

我已经实现了一个缓存类,该缓存类能够以线程安全的方式填充/提取记录(示例中未显示)。 但是我对此类的const正确性有一些怀疑。

给定以下类:

public:

void add(const Record& record)
{
    boost::shared_ptr<Record> rec(new Record(record));
    _records.push(rec);
}

std::vector<boost::shared_ptr<Record> getRecords() const
{
    return _records;
}

private:

std::vector<boost::shared_ptr<Record> > _records;

这里的getRecords()函数返回缓存的内容。 但是获取记录的所有其他类都可以修改记录,不是吗?

所以我想将缓存作为const记录的容器返回。

我的新实现如下所示:

public:

void add(const Record& record)
{
    boost::shared_ptr<const Record> rec(new Record(record));
    _records.push(rec);
}

std::vector<boost::shared_ptr<const Record> getRecords() const
{
    return _records;
}

private:

std::vector<boost::shared_ptr<const Record> > _records;

这是实现所需功能的正确方法吗?

原则上,您是对的,将成员声明为std::vector<boost::shared_ptr<const Record> > _records; 确实会阻止客户端代码修改存储在您的类中的pointe对象。 还有一个细节值得指出:

std::vector<boost::shared_ptr<const Record> getRecords() const

此方法按值返回向量。 因此,客户端代码将始终在Record元素向量的副本上进行操作,这需要复制容器中的每个元素-如果不是必需的,则可以考虑更改方法签名以使其返回引用:

std::vector<boost::shared_ptr<const Record>& getRecords() const

当客户端代码在引用上运行时,这会更有效率。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM