[英]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.