|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
10.11.2011, 14:41 | #1 |
добрый няша
Старожил
Регистрация: 29.10.2006
Сообщений: 4,804
|
Как правильно возвращать созданный в функции объект?
допустим функция создаёт строку std::string . как правильно и оптимизированно возвратить этот объект?
сейчас, я делаю так. Код:
|
10.11.2011, 15:14 | #2 |
C++ hater
СтарожилДжуниор
Регистрация: 19.07.2009
Сообщений: 3,333
|
ну есть 4 варианта, как вернуть объект из функции:
1. явный возврат. у объекта должен быть реализован конструктор копирования 2. возврат ссылки/указателя на статический объект 3. возврат ссылки указателя на глобальный объект (или на член класса) 4. непосредственное изменение объекта, переданный по ссылке/указателю через входящий параметр каждый вариант зависит от ситуации. вектор к примеру, яб не возвращал явно, только через входящий ссылочный параметр. std::string можно и явно вернуть пс. твой код неверен Код:
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay
My other car is cdr. Q: Whats the object-oriented way to become wealthy? A: Inheritance |
10.11.2011, 15:47 | #3 |
добрый няша
Старожил
Регистрация: 29.10.2006
Сообщений: 4,804
|
Код:
|
10.11.2011, 16:15 | #4 |
Старожил
Регистрация: 25.10.2011
Сообщений: 3,178
|
Возвращать указатель, в функции получать его через new. Если строк известное число, может быть проще использовать глобальный массив.
|
10.11.2011, 16:19 | #5 |
Участник клуба
Регистрация: 23.12.2010
Сообщений: 1,129
|
1) Можно возвращать просто объект как он есть.
Код:
2) Можно создавать объект в динамической памяти (new), и возвращать указатель на него. Тогда копирования не будет, но можно будет случайно забыть освободить память. Потому стОит возвращать shared_ptr в общем случае. Ну и работа с памятью тоже занимает время, об этом не нужно забывать. 3) Можно передавать готовую переменную для возвращаемого значения: Код:
P. S. разные извращенные варианты вроде возвращения указателей на статические объекты в общем случае категорически противопоказаны. P. P. S. А вообще, раз ты начал задаваться такими вопросами, стОит почитать какую-то хорошую книжку по c++. Мейерса, например. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Не знаю как правильно сделать вызов функции | Homutova_Julia | Помощь студентам | 14 | 07.06.2011 23:45 |
как правильно назвать фу-ю чтобы возвращать фалсе | SaNeKBF | C# (си шарп) | 4 | 18.05.2011 08:51 |
ООП - получить еще не созданный объект в дочернем классе | Cronos20 | PHP | 7 | 30.11.2010 01:09 |
onkeydown. Как правильно передать в обработчику объект? | Stilet | JavaScript, Ajax | 2 | 24.11.2010 13:15 |
Из потока прочитать созданный в программе объект. | DIgorevich | Общие вопросы Delphi | 3 | 30.08.2010 08:16 |