|
|
|
aspirin2003 |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 111 Регистрация: 18.3.2007 Где: Саратов Репутация: нет Всего: нет |
В общем заработало когда переопределил так:
Однако мне кажется что это не лучший способ (данные перемещаются из одной области памяти в другую). Может есть какой-нибудь способ передачи по указателю/ссылке? |
|||
|
||||
SABROG |
|
|||
Hacker Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 81 Всего: 91 |
Т.е. если позволить компилятору присваивать данные за тебя, то перемещения данных из одной области памяти в другую не будет ;) ? Посмотри как в Qtшных классах реализован алгоритм "implicit sharing (copy-on-write)" и сделай также если хватит знаний. |
|||
|
||||
Любитель |
|
|||
Программист-романтик Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 16 Всего: 92 |
Там реализовано через свои макросы, но предоставляется ready to use класс QImplicitSharedDataPointer (может в названии чуть ошибся). С подробным и простым how to use it. Главное консты расставлять на методах - иначе вдобавок к COW будет COR (Copy on reading) |
|||
|
||||
SABROG |
|
|||
Hacker Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 81 Всего: 91 |
Асистент вроде не находит. Нашел только QAtomicInt и QAtomicPointer, но пока не понял их предназначение.
|
|||
|
||||
aspirin2003 |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 111 Регистрация: 18.3.2007 Где: Саратов Репутация: нет Всего: нет |
Прочитал статью Data Sharing with Class. Круто придумано, нечего сказать |
|||
|
||||
SABROG |
|
|||
Hacker Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 81 Всего: 91 |
Так, значит речь идет QSharedData, QSharedDataPointer и QSharedMemory, и QExplicitlySharedDataPointer
Народ, поздравлю всех с Днем Системного Администратора |
|||
|
||||
Любитель |
|
|||
Программист-романтик Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 16 Всего: 92 |
||||
|
||||
aspirin2003 |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 111 Регистрация: 18.3.2007 Где: Саратов Репутация: нет Всего: нет |
Но только в случае, когда методы не модифицируют данные, так? |
|||
|
||||
anatox91 |
|
|||
программист-самоучка Профиль Группа: Участник Сообщений: 699 Регистрация: 12.1.2008 Где: ++Украина.Крым++ Репутация: нет Всего: 13 |
aspirin2003, ну если модифицируют, то можно сделать эти данные mutable, но все конечно зависит от ситуации
-------------------- The code is the design © Sony VAIO VGN-FW480J |
|||
|
||||
aspirin2003 |
|
||||||
Шустрый Профиль Группа: Участник Сообщений: 111 Регистрация: 18.3.2007 Где: Саратов Репутация: нет Всего: нет |
Попробовал переписал класс с использованием QSharedData. Вот примерно то, что получилось:
calcelement.h
calcelement.cpp
MSVC этот код компилит нормально, все работает. А gcc ругается в этой строке:
no match for 'operator=' in 'res = CalcElement::operator+(CalcElement&)(((CalcElement&)(+m1)))' calcelement.cpp Помогите пожалуйста разобраться, в чем косяк. |
||||||
|
|||||||
aspirin2003 |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 111 Регистрация: 18.3.2007 Где: Саратов Репутация: нет Всего: нет |
Ни у кого никаких соображений? Просто надо чтобы программа работала и под Linux тоже, а gcc ругается :(
|
|||
|
||||
nickless |
|
||||
Гентозавр Профиль Группа: Участник Клуба Сообщений: 2976 Регистрация: 29.8.2005 Где: Germany Репутация: 13 Всего: 181 |
aspirin2003, типы операторам надо давать не какие попало, а какие положено
*.h
*.cpp
Это сообщение отредактировал(а) nickless - 28.7.2008, 21:16 -------------------- Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies - Linus Torvalds |
||||
|
|||||
aspirin2003 |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 111 Регистрация: 18.3.2007 Где: Саратов Репутация: нет Всего: нет |
nickless Спасибо! Все заработало!
|
|||
|
||||
WizardNG |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 15.2.2006 Где: Н. Новгород Репутация: нет Всего: нет |
удалено
Это сообщение отредактировал(а) WizardNG - 26.7.2019, 15:00 |
|||
|
||||
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |