繁体   English   中英

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

[英]How to modify a private array without giving too much freedom?

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

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

谢谢(并很抱歉使您困惑我的问题),但是对于这些事情我还是很陌生。 希望您能通过此图更好地理解:

理想的解决方案是能够给出的一个实例A a和的处理程序指定的唯一实例Ba的,但不必超过该总控制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 可能性是无限的,最好的选择取决于您的实际约束。

如果确实必须使用动态分配,但希望提供对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;
};

暂无
暂无

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

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