![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
INHazeR |
|
||||||||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 8.12.2006 Репутация: нет Всего: нет |
Добрый день.
Предположим, имеем
Т.е. инициализация поля класса, представляющего собой указатель на массив символов, происходит по указателю, данному пользователем. Я себе представляю это так:
Теперь представим себе такую ситуацию:
Получается по смыслу полная чушь. Мы создали объект класса, инициализировали одно из его полей соответствующей переменной, расположенной по адресу myname. И вместе с тем, имеем неограниченный доступ фактически к частной переменной класса, name. Что и приводит вот к таким плачевным результатам. Напрашивается решение:
Однако это не работает. Даже если бы и работало, появляется вопрос: а что клиенту делать с указателем _name? Удалять вручную после создания объекта класса? В общем, совсем я запутался. Прошу помощи и разъяснений, и пардон если вопрос глупый. ![]() |
||||||||
|
|||||||||
Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
Можно и нужно использовать std::string
|
|||
|
||||
INHazeR |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 8.12.2006 Репутация: нет Всего: нет |
||||
|
||||
Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
||||
|
||||
Alek86 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
класс не должен (за редким исключением) содержать указатели на внешние данные, поскольку его данные не должны зависеть от внешнего мира напрямую. это и есть принцип инкапсуляции.
потому std::string и подходит идеально. он просто скопирует себу ту твою строку будет хранить созданную копию у себя. а при удалении экземпляра класса Worker, std::string сам удалит копию. Это сообщение отредактировал(а) Alek86 - 4.11.2007, 22:41 |
|||
|
||||
Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
||||
|
||||
Alek86 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
жесть
зачем этому учить? ![]() пусть лучше пользует уже std::string. ЗЫ.
ЗЗЫ. Почти как рядом в топике у архимеда вышло ![]() Это сообщение отредактировал(а) Alek86 - 5.11.2007, 19:23 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |