![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
zhekha |
|
||||
Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 19.10.2005 Репутация: нет Всего: нет |
Чем это отличается от следующего?
Утверждается, что в первом случае переданный указатель становится недействительным... |
||||
|
|||||
newbee |
|
|||
![]() Бревно ![]() ![]() Профиль Группа: Участник Сообщений: 703 Регистрация: 24.8.2011 Репутация: 4 Всего: 19 |
Некорректно, после выполнения функции строка будет удалена, а указатель, когда-то ей принадлежащий, станет битым.
Во втором случае ты возвращаешь указатель на статическую область памяти программы, она будет действительна всегда на протяжении работы программы. Сделай так:
-------------------- You're face to face With man who sold the world |
|||
|
||||
zhekha |
|
|||
Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 19.10.2005 Репутация: нет Всего: нет |
Или, как вариант, возвращать string
Или это тоже некорректно? Это сообщение отредактировал(а) zhekha - 24.1.2012, 06:15 |
|||
|
||||
Michrutka |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 57 Регистрация: 6.2.2008 Репутация: нет Всего: нет |
zhekha,
Во втором случае ты возвращаешь объект std::string, следовательно, будет вызван копирующий конструктор в строчке
то есть при выходе из функции, вызовется копирующий конструктор, значение присвоится переменной version, а потом локальные переменные функции будут уничтожены. Потому все корректно. |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Более того, если компилировать под стандарт C++11, то вместо копирующего конструктора будет вызван перемещающий, работа которого сведется к копированию значений указателей (без перевыделения памяти). |
|||
|
||||
zhekha |
|
|||
Новичок Профиль Группа: Участник Сообщений: 48 Регистрация: 19.10.2005 Репутация: нет Всего: нет |
Всем спасибо, вопрос исчерпан.
|
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
||||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |