![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
Вот такой вот велосипед я однажды написал...
отнаследовать от класса reference_counter, а затем работать через класс reference, прикол этого кода в том, что с потомками reference_counter никак иначе, кроме как через смарт поинтер работать нельзя... |
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Lazin, мне очень даже с виду понравилось. Какая лицензия у этого исходника? Под GPLv3 можно стырить?
|
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
||||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
ээээ... ну если в трёх словах, ты объявляешься автором данного кода со всеми вытекающими + разрешаешь всему сообществу изменять код как заблагорассудится при условии сохранения твоих авторских прав а так - на http://www.gnu.org/licenses/gpl-3.0.html всё расписано. |
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
|
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Lazin, смеёшься
|
|||
|
||||
| sol78 |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 366 Регистрация: 7.7.2007 Репутация: 1 Всего: 0 |
Я просто в тупике
вот один конструктор для SP ни как не продвигается, гляньте плз,
вырезаю все остальное еще не написано
Lazin, спасибо за класс, но использовать его не могу токовы требования |
||||
|
|||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
это в объявлении класса ставить не нужно увы, телепаты не скажут нам, какой это конструктор и что он должен делать... Это сообщение отредактировал(а) JackYF - 29.1.2008, 17:32 |
|||
|
||||
| sol78 |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 366 Регистрация: 7.7.2007 Репутация: 1 Всего: 0 |
JackYF, не множечко терпения
в конструкторе: -вызов ф. addSmartPointer(const char* str) -там
с помощью коменариев попробовала обьяаснить... |
||||
|
|||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
this (как указатель) изнутри самого себя менять нельзя. Создавай новый объект, который уже указывает на нужную строку либо меняй архитектуру. |
|||
|
||||
| sol78 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 366 Регистрация: 7.7.2007 Репутация: 1 Всего: 0 |
Проблема видемо в том что я не могу влиять (в необходимой мне степени) на обьект на уровне конструктора,
что остается вернутся с чаго начала? Не ужели етот вариант тупиковый? |
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Пробуй другие варианты, которые приходят тебе в голову. Возможно, это создание не одного централизованного списка, а все одинаковые строки хранят отдельные, "свои" списки. |
|||
|
||||
| Lazin |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
На мой взгляд COW - это как-то так:
Набросал небольшой пример, как можно это сделать... я использовал код который приводил выше Здесь конечно все сильно упрощено, но идея должна быть понятна: объекты класса str_buffer содержат непосредственно данные(строки char-ов), объекты класса String - содержат ссылки на объекты str_buffer, при копировании строк, передаче по значению, копирования данных не происходит, копируются только ссылки (класс ссылки - reference) и при изменении количества ссылок на буфер, счетчик ссылок изменяется то-же, при обнулении счетчика ссылок буфер удаляется. При изменении строки, просто выделяется новый буффер, а старый освобождается (его счетчик ссылок уменьшается на 1), если только одна строка использовала этот буфер он удалится.
|
||||
|
|||||
| sol78 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 366 Регистрация: 7.7.2007 Репутация: 1 Всего: 0 |
Lazin,
до COW у меня еще руки не дошли... но в принципе идея понятна... Я заткнулась на счетчике ссылок и не дублиравание обьектов.... |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |