Сообщение общий ресурс от 19.12.2019 7:23
Изменено 19.12.2019 7:27 niXman
общий ресурс
привет!
есть класс, мембером которого является vector<type>.
этот класс может создавать обекты своего же типа, которые содержат только часть данных из "родительского":
(код сильно упрощен, и в векторе не 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, и тогда все дети могут ссылаться на него.
одно не нравится в этом варианте: нужны дополнительные мемберы, которые будут использоваться только детьми — значит код класса придется дополнить кучей условий проверки, дите или родитель %)
как быть?
общий ресурс
привет!
есть класс, мембером которого является vector<type>.
этот класс может создавать обекты своего же типа, которые содержат только часть данных из "родительского":
(код сильно упрощен, и в векторе не 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, и тогда все дети могут ссылаться на него.
одно не нравится в этом варианте: нужны дополнительные мемберы, которые будут использоваться только детьми — значит код класса придется дополнить кучей условий проверки, дите или родитель %)
как быть?