如何在不给予太多自由的情况下修改私有数组?

时间:2016-03-10 22:33:30

标签: c++

我有一个名为A的类,其中包含private动态分配的class B个对象数组。我有一个指针数组(?)到B array A内部的元素(描述的第一个数组),我需要一个函数来帮助我修改这个数组(实际上让我得到了指向那些元素。)

最好的合作方式是什么?指针,参考文献?
 我想到的一种方法是在A中创建一个getter,它返回数组的地址或数组的元素,但我认为它在类之外提供了太多的自由。

谢谢(抱歉让我对你的问题感到困惑)但我对这些事情很陌生。希望你能用这张图更好地理解:

2 个答案:

答案 0 :(得分:0)

理想的解决方案是,在A a的实例和处理程序指定B所拥有的a的唯一实例的情况下,能够完全控制此B

我建议在数组中使用一个简单的索引:

class A
{
    Array _array;
public:
    // ctr, operator=, ...
    const B& operator[](std::size_t index) const { return _array[index]; }
    B& operator[](std::size_t index) { return _array[index]; } // if necessary
};

Ou还可以为此数组定义迭代器,或返回A::_array::const_iterator。可能性是无限的(有点),最好的选择取决于你的实际约束。

答案 1 :(得分:0)

如果你真的必须使用动态分配,但希望提供对B的引用,你可以这样做:

struct B {};

struct A
{
    B& operator[](size_t i) {
        return *_bs[i];
    }

    const B& operator[](size_t i) const {
        return *_bs[i];
    }

    std::size_t size() const {
        return _bs.size();
    }

private:
    std::vector<std::unique_ptr<B>> _bs;
};