63 / 64 / 11
Регистрация: 27.02.2013
Сообщений: 1,116
|
|
1 | |
Вернуть полноценный класс с деструктором из функции07.08.2014, 15:15. Показов 3219. Ответов 13
Метки нет (Все метки)
можно ли вернуть из функции класс? я имею ввиду полноценный класс с деструктором (например std:string) просто по идее вот например создал ты в функции экземпляр класса, return-ом вернул, а при выходе из видимости (функции) вызвался деструктор и экземпляр уничтожился... т.е. что классы можно возвращать только через параметр функции - по ссылке?
0
|
07.08.2014, 15:15 | |
Ответы с готовыми решениями:
13
Создать полноценный класс "Строка", с конструкторами, деструктором, преобразованием типов Класс с Конструктором и Деструктором Класс с непустым деструктором Класс с деструктором без конструктора |
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
||||||
07.08.2014, 15:26 | 2 | |||||
GetHelp, Читайте на тему конструктора копии, и да, возвращается не класс, а объект.
1
|
Комп_Оратор)
|
|
08.08.2014, 00:39 | 3 |
GetHelp, нет разницы переменную какого типа возвращает функция. Для пользовательских типов в фрйеме стека где находится точка вызова, выделяется память под объект результата. По окончании работы функции эта память инициализируется конструктором копирования (копируется локальный к функции объект). Если вызов имеет смысл, то результат присваивается или инициализирует переменную в точке вызова и уничтожение локального объекта не влияет на жизненный цикл полученной переменной.
ps. Главное ссылку на локальную переменную не вернуть.
0
|
63 / 64 / 11
Регистрация: 27.02.2013
Сообщений: 1,116
|
|
08.08.2014, 16:55 [ТС] | 4 |
IGPIGP, О_о не знал... а что за конструктор копирования? это у всех классов по умолчанию есть? или для своего класса надо что то такое еще писать?
0
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
||||||
08.08.2014, 17:21 | 5 | |||||
Из стандарта (12.8/2):
0
|
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
|
||||||
08.08.2014, 17:42 | 6 | |||||
Ну и не забываем про старый добрый RVO. В данном фрагменте
1
|
Комп_Оратор)
|
|
08.08.2014, 18:03 | 7 |
Nick Alte, вот тут интересно о RVO и NRVO
http://alenacpp.blogspot.com/2008/02/rvo-nrvo.html Ну то есть:
0
|
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
|
|
08.08.2014, 18:22 | 8 |
Да, Алёна вообще выдающийся автор.
Возвращаясь к теме RVO/NRVO, сделаю вдогонку два замечания. Во-первых, в отличие от обычных оптимизаций, они влияют на наблюдаемое поведение. Это очень важно. Во-вторых, для решения проблем с передачей "тяжеловесов" при наличии отсутствия RVO (а также энного количества других проблем) в C++11 придумали семантику перемещения через rvalue references.
1
|
63 / 64 / 11
Регистрация: 27.02.2013
Сообщений: 1,116
|
|
08.08.2014, 18:37 [ТС] | 9 |
ясно понятно...
а вот еще заинтересовало вот это если это действительно так значит к полям объекта можно обращаться не только через имя? как это можно реализовать?
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
08.08.2014, 18:51 | 10 |
1
|
Комп_Оратор)
|
|
08.08.2014, 18:53 | 11 |
Не значит. Конструктор - функция-член и ей всё методо-образное не чуждо. Независимо, от того явно или неявно вызывается. Без имени можно по указателю (косвенно), но тут нет ничего сокровенного.
0
|
63 / 64 / 11
Регистрация: 27.02.2013
Сообщений: 1,116
|
|
08.08.2014, 19:18 [ТС] | 12 |
но ведь конструкторы реализовывают люди, ибо программы еще не научились писаться сами
я имею ввиду доступ к отдельным полям неизвестного переданного объекта если таковые у него имеются... вот что интересно то... допустим передали какую то структуру в класс-контейнер (на шаблонах) и как сделать чтобы этот класс (ну или просто функция на шаблонах) могла обработать каждое поле переданного объекта, например сохранить каждое поле в файл по отдельности...
0
|
3257 / 2059 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
|
|
08.08.2014, 19:25 | 13 |
На уровне языка такой мощной рефлексии нет.
Можно посмотреть на boost.serialization
1
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
08.08.2014, 19:58 | 14 |
Можно посмотреть на boost::fusion. Он позволит пройти по всем полям структуры. http://www.boost.org/doc/libs/... /doc/html/
Адаптируем структуру для работы с fusion посредством BOOST_FUSION_ADAPT... Дальше у нас уже sequence по которому можно бегать, каждый элемент данной последовательности ссылается на элемент структуры. Добавлено через 28 минут Простой пример работы с fusion
1
|
08.08.2014, 19:58 | |
08.08.2014, 19:58 | |
Помогаю со студенческими работами здесь
14
Реализовать класс строки с деструктором Класс: Создать класс "Растение" с конструкторами и деструктором Создать класс с конструктором и деструктором, виртуальным и невиртуальным методами как написать программу, к примеру, класс шаблон выводящая дин. массив любого типа, с конструктором и деструктором... Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |