Информация об изменениях

Сообщение общий ресурс от 19.12.2019 7:23

Изменено 19.12.2019 7:27 niXman

общий ресурс
привет!

есть класс, мембером которого является vector<type>.

этот класс может создавать обекты своего же типа, которые содержат только часть данных из "родительского":
struct myclass {
    using element_type = int;

    myclass at(size_t index) {
        element_type *p = ... // находим элемент по индексу
        size_t size = ...     // определяем размер

        return {p, size};
    }
private:
    myclasss(const element_type *p, size_t size)
    { m_ints.assign(p, size); }

    vector<element_type> m_ints;
};

(код сильно упрощен, и в векторе не int`ы)

проблема тут в том, что данные в "родительском" классе иммутабельны, но дети все равно вынуждены копировать их. от этого и хочется избавиться.

вектор можно хранить в shared_ptr, и тогда все дети могут ссылаться на него.

одно не нравится в этом варианте: нужны дополнительные мемберы, которые будут использоваться только детьми — значит код класса придется дополнить кучей условий проверки, дите или родитель %)

как быть?
общий ресурс
привет!

есть класс, мембером которого является vector<type>.

этот класс может создавать обекты своего же типа, которые содержат только часть данных из "родительского":
struct myclass {
    using element_type = int;

    myclass at(size_t index) {
        element_type *p = ... // находим элемент по индексу
        size_t size = ...     // определяем размер

        return {p, size};
    }
private:
    myclasss(const element_type *p, size_t size)
    { m_ints.assign(p, size); }

    vector<element_type> m_ints;
};

(код сильно упрощен, и в векторе не int`ы)

проблема тут в том, что данные в "родительском" классе иммутабельны, но дети все равно вынуждены копировать их. от этого и хочется избавиться.

как вариант: вектор можно хранить в shared_ptr, и тогда все дети могут ссылаться на него.
одно не нравится в этом варианте: нужны дополнительные мемберы, которые будут использоваться только детьми — значит код класса придется дополнить кучей условий проверки, дите или родитель %)

как быть?