| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > Copy Constructor |
| Автор: yngwie19 27.10.2008, 23:10 | ||
Привет всем есть вопрос по Copy Constructor. Допустим есть собственный класс String
Вопрос: Почему в Copy Constructore не нужно удалять нулевой симол "\0", создаваемый при инициализации объекта, в данном случае временного,(т.к мы возвращаем из String String::operator+(String& s) сопию s3) а сразу выделять для этого времнного объекта динамическую память? |
| Автор: eyeofhell 27.10.2008, 23:31 | ||
Уточните где имнно объект временный - в copy constructor или operator+ ? Это же разные функции. |
| Автор: yngwie19 27.10.2008, 23:34 |
| eyeofhell, в стоке 59 мы возвращаем копию локалного объета s3, тем самым main генерируется Конструктор копии. |
| Автор: eyeofhell 28.10.2008, 00:04 | ||||
Вопрос очень странный. Сперва про нулевой символ который зачем-то удалять, а потому сразу про этот временный объект. Что тут объекто-то? Нулевой символ? Он нифига не объект, он байт в строке. Конструктор копирования создает новый объект из существующего. Кроме случаев с '+', может быть использован например вот так:
Ноль в конец строки дописыают всегда чтобы можно было на эту строку вернуть указатель. Функции CRT, которые работаю с указателями на строку ( например, printf() ), по этому нулю длину строки определяют. Для них нет поля length класса String, им только указатель дают. Что происходит в s3 = s1 + s2: 1) выполняется s1.operator+( s2 ), который внутри себя создает на стеке новую строку s3(temp). 2) s1.operator+( s2 ) делает return s3(temp). При этом создается временная строка для которой вызывается конструктор копирования ( s3(temp) ). 3) s1.operator+( s2 ) выходит, созданная на стеке s3(temp) автоматически разрушается. 4) выполняется s3.operator=( временная строка ) 5) программа завершает выполнение строки кода s3 = s1 + s2, временная строка автоматически разрушается. |
| Автор: J0ker 28.10.2008, 00:05 | ||
а вопрос не понят даже с пояснением |
| Автор: yngwie19 28.10.2008, 00:36 |
| Ой ребят извените Я разобрался сам. Ну да немножко не понятно написал |