![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Ibragim |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 177 Регистрация: 28.9.2004 Где: Киев Репутация: нет Всего: нет |
Всем день добрый. По поиску нашел похожие темы, но не совсем то что хотелось бы (http://forum.vingrad.ru/topic-215258.html, http://forum.vingrad.ru/topic-113518.html, http://forum.vingrad.ru/topic-122332.html), поэтому вынесу вопрос на оборзе^w обозрение.
Итого задача. Чисто теоретическая, возможно ли такое в принципе. Необходимо создать такой класс работы со строками, чтобы с объектами класса можно было проводить подобные операции:
Перегрузка операторов сравнения и сложения - все понятно, но получается ТЕОРЕТИЧЕСКОЕ ограничение: Оператор + должен возвращать объект (или ссылку на объект, не важно), а поскольку b и с - строки - то получается что придется выделять память и создавать такой объект. Понятно, что это никуда не годится - ведь память останется не освобожденной для такого созданного объекта (a+b). Вот и вопрос - есть ли возможность корректно создать класс работы со строками, с объектами которого без дополнительных ухищрений можно будет проводить подобные операции? Я не вижу никакого варианта решения, так сказать, ввиду структуры языка, но я много чего не знаю, вот и спрашиваю. PS А, приложение имеет достаточно жесткие ограничения по размеру / кроссплатформенности / подключаемым библиотекам, то есть вопрос о том, как реализовать самому, а не в какой библиотеке есть что-то похоже. Это сообщение отредактировал(а) Ibragim - 9.7.2008, 09:56 |
|||
|
||||
Alek86 |
|
||||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
не парься, уже до тебя все придумано
не правильно поскольку оператор + возвращает объект по значению, то он является стековым и удалится при достижении конца своего скопа Добавлено через 4 минуты и 55 секунд
судя по выводу, все нормально ![]() |
||||||
|
|||||||
Ibragim |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 177 Регистрация: 28.9.2004 Где: Киев Репутация: нет Всего: нет |
Да, спасибо, под std вариант мне знаком. Но хотелось бы узнать, реализуема ли проблема теоретически - ну например не для строк, а для других объектов, членами которых есть динамически выделяемые куски памяти. не правильно поскольку оператор + возвращает объект по значению, то он является стековым и удалится при достижении конца своего скопа м... да? а то что при сложении двух строк при реализации оператора сложения мне придется делать malloc()/new() тоже ничего? вроде не должен компилятор настолько умным быть ![]() Это сообщение отредактировал(а) Ibragim - 9.7.2008, 10:09 |
|||
|
||||
Alek86 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
если твой компилятор стандартен, то он обязан иметь возможность подключить string и я не уверен, что тебе самому получится сделать что-то более быстрое/удобное/кроссплатформенное/мелкое, чем std::string Добавлено @ 10:10
не, компилятор не должен но есть такая штука, как умные указатели std::auto_ptr, boost::shared_ptr... храни результат выделения памяти в них, и они в деструкторе удалят твой new (malloc в плюсах крайне нехорошо использовать) Это сообщение отредактировал(а) Alek86 - 9.7.2008, 10:11 |
|||
|
||||
Ibragim |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 177 Регистрация: 28.9.2004 Где: Киев Репутация: нет Всего: нет |
Понятно, то есть настоятельные рекомендации использовать std::
Ну что ж, спасибо, в любом случае практическую сторону вопроса так и будем решать. Если кто-то позже прочтет эту тему и знает как решить данный вопрос без std, очень прошу написать для общего развития. А пока спасибо Alek86, пометим как решенный. Это сообщение отредактировал(а) Ibragim - 9.7.2008, 10:17 |
|||
|
||||
Alek86 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
||||
|
||||
Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
||||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Открою тебе великую тайну ![]() |
|||
|
||||
SteN |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 4.9.2006 Где: Брянск Репутация: нет Всего: нет |
а что мешает в opertaor + создать объект? Память соответсвенно чистится в диструкторе...
ПС: код ужасен, знаю. Но суть,я думаю,передал. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |