我有一个类Data
:如何将一组指针转换为一组const指针?
class Data {
private:
int d;
public:
int Get() const {
return d;
}
void Set(int d) {
this->d = d;
}
};
和类Manager
来管理一组Data
:
class Manager {
private:
std::set<std::shared_ptr<Data>> dataSet;
public:
const std::set<std::shared_ptr<const Data>>* GetDataSet();
};
我想用GetDataSet()
摆脱Manager
类dataSet
,但我不希望他人修改设置或数据。所以我想返回类型GetDataSet()
是一个const指针的const指针。然而,我不能直接return &dataSet
在GetDataSet()
,因为std::set<std::shared_ptr<Data>>
不能转换为std::set<std::shared_ptr<const Data>>
。
解决该问题的一种方法是制作该套件的副本。但它有额外的成本。另一种方法是使Data
类的Set()
函数保密,并让Manager
类成为类Data
的朋友。但它会将类Data
的所有私有字段暴露给Manager
类。
有没有更好的方法?
有没有简单的方法来做到这一点。部分原因与std :: shared_ptr的某些设计缺陷有关。 –
是否有你需要使用共享指针开始的原因?如果你只是使用std :: set 那么你可以提供对该集合的const引用的公共访问。在附注中,看到使用共享指针同时提供返回原始指针的公共方法也很奇怪。 – qexyn
@qexyn我的'Data'类实际上很大。在'Manager'类中有两个数据集由几乎相同的一组数据组成,而一个数据集按属性'a'排序,另一个按'b'排序。有时我会从一组中获得前几个元素,并将它们从另一个中移除。所以我选择使用指针。 – Haoshu