![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Diaus |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 24.7.2004 Репутация: нет Всего: нет |
Пользовался долгое время классом CString, но в некоторых моментах он меня не устраивает:
1) Он работает, как тип по значению, тобишь при присваивании происходит полное копирование CString s1 ="Some string"; CStrng s2; s2 = s1; 2) Попробовал как-то поюзать его в консольном приложении, так что-то не получилось. Кстатии не подскажете, какие хедеры нужно включить для этого(или для этого обязательно юзать библиотеку MFC) |
|||
|
||||
| chipset |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 165 |
Насчёт первого, не понял конкретно что тебе не нравится?
Насчёт второго, юзай STL.
--------------------
|
||||
|
|||||
| Diaus |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 24.7.2004 Репутация: нет Всего: нет |
По-моему я довольно ясно сказал, повторюсь подробнее.
Что конкретно не нравится: при каждом присваивании создается дополнительная копия, а я хочу, чтобы копия создавалась только при изменении. MyString str1 = "abcd"; MyString str2 = str1;// str1 и str2 указывают на одну и ту же строку str2[2] = 'k'; // для str2 создаётся отдельная копия! В обычном случае копия создаётся сразу Вопрос был в том, имеются ли стандартные классы строк, которые реализовывали бы такое поведение? Во второй части вопроса я спрашивал про CString(хотя и за string спасибо, но меня интересовал именно CString). |
|||
|
||||
| Fixin |
|
|||
![]() Ёжик ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1357 Регистрация: 6.1.2004 Репутация: 2 Всего: 18 |
Попробуй сделать свой собственный класс с перегрузкой операторов. Все будет так, как ты захочешь.
|
|||
|
||||
| Diaus |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 24.7.2004 Репутация: нет Всего: нет |
Этим сейчас и занимаюсь
|
|||
|
||||
| Borisff2003 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 198 Регистрация: 26.2.2004 Где: г. Уфа Репутация: 1 Всего: 1 |
А кто будет отвечать за удаление строки, или ссылки считать будешь?
--------------------
Лень, двигатель прогресса |
|||
|
||||
| chipset |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 165 |
Diaus
Для CString надо включить #include <atlstr.h> Добавлено @ 07:17 Он вообще ATL'овский класс насколько я понял... --------------------
|
|||
|
||||
| AndyY |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 316 Регистрация: 8.5.2004 Где: СПб Репутация: 2 Всего: 4 |
Diaus
сдается мне, что такой класс породит исключительно опасный код. Вот пример:
глядя на код, это поведение неочевидно, а значит породит баги. |
|||
|
||||
| Borisff2003 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 198 Регистрация: 26.2.2004 Где: г. Уфа Репутация: 1 Всего: 1 |
Тут проблема не в классе а в функции А вот то что придется реализовывать семантику умного указателя с автоматическим подсчетом ссылок, вот это да. --------------------
Лень, двигатель прогресса |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |