Russian Qt Forum
Апрель 20, 2024, 07:04 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Шаринг регулярных данных  (Прочитано 2040 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« : Март 29, 2021, 11:11 »

Добрый день

Есть простецкий член класса
Код
C++ (Qt)
struct CMaterial {
...
 std::vector<int> mIndex;
...
};
И вот обнаружилось что "иной раз" этот mIndex интенсивно повторяется и жрет немало RAM и раздувает файлы данных (> 1 Gb). Напрашивается его "зашарить", причем хотелось бы это сделать "малой кровью", проблема возникает далеко не всегда.
Цитировать
Используй QVector вместо std::vector - и будет тебе счастье
[off]
Давая такие ответы человек полагает что "шлифует свое мастерство" Улыбающийся, но это рано или поздно проходит, и он покидает форум
[/off]
Ну хорошо, допустим имплисит шара мне автоматом "расшарит", пусть придется отследить [] и at(). А как "вернуть взад" при undo? И как писать/читать из файлов/потоков избегая "дубляжа"? А если std::shared_ptr ("Qt только для UI") то я не имею даже авто-расшаринга. Придется городить какую-то свою систему. Конечно это не так уж сложно, но это же "в чистом виде" велик, где же общность? Или возможны "более солидные" решения?

Другой вопрос, который я бы тоже охотно пообсуждал: а не "мелкотравчатый" ли этот подход? Очевидно что дублируется вся структура CMaterial, вот ее и надо шарить! Тут я не знаю как, потому что CMaterial имеет разнообразные члены ссылки/ID на владельца, которые у копий не равны.

Спасибо
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #1 : Март 31, 2021, 14:42 »

"И тишина..". А ведь не так уж давно каждым вторым словом было "шаред" или "юник", несчастные "голые" указатели безжалостно истреблялись и.т.п. Наверное мне никогда не угнаться за модой Улыбающийся Ну ладно, сделал свой велик, получился какой-то "тоже шаред" но который не имеет ничего общего со стандартным. Конечно это плохо
Код
C++ (Qt)
template <class T>
struct CShared {
CShared( void );
CShared( const CShared & other );
~CShared( void );
 
CShared & operator = ( const CShared & other );
 
const T & GetData2Read( void ) const;
T & GetData2Edit( void );
 
void SetData ( const T & data );
void FinishEdit ( void );
bool InEdit ( void ) const;
 
static void PrintSets ( void );
 
private:
void Remove ( void );
void Add2Read ( const T & data );
 
// data members
T * mData = 0;
 
static std::set<T *, ContentLess<T>> mSetRead;
static std::set<T *> mSetEdit;
};
Я конечно понимаю что там большие, умные дяди "которые знают плюсы в 100 раз лучше", а я тут лезу со своими "костылями". Но что остается если нужного мне ф-ционала нету, хоть лопни  Плачущий

Вообще стандартный шаред не то чтобы "плох", но мне ни разу не удавалось  его "развить", получить больше возможностей чем стандартных.
« Последнее редактирование: Март 31, 2021, 14:53 от Igors » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.087 секунд. Запросов: 22.