![]() |
|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Участник клуба
Регистрация: 14.06.2011
Сообщений: 1,138
|
![]()
Почему не могу использовать
MyClass instA = someFunction() или MyClass instA = instB? Ведь string st = retStr() прекрасно работает. Код:
Последний раз редактировалось Smogg; 03.12.2013 в 16:53. |
![]() |
![]() |
![]() |
#2 |
Форумчанин
Регистрация: 24.12.2012
Сообщений: 639
|
![]()
Вы не возвращайте локальный стековый объект для начала.
ICQ: 677936656 Gmail: ekEmbed@gmail.com
|
![]() |
![]() |
![]() |
#3 |
Участник клуба
Регистрация: 14.06.2011
Сообщений: 1,138
|
![]()
А есть разница? Стд::стринги ж нормально возвращаются.
Сейчас у меня возвращается указатель на статичный объект, у которого есть перегруженный оператор=: ClsA operator=(ClsA * instAssgn); Но, блин, также есть и ClsA operator=(ClsA instAssgn); Это некрасиво, когда один и тот же оператор работает как с объектами, так и с указателями на оные... Отчего вместо аккуратного Код:
Код:
Последний раз редактировалось Smogg; 03.12.2013 в 18:23. |
![]() |
![]() |
![]() |
#4 |
Участник клуба
Регистрация: 14.06.2011
Сообщений: 1,138
|
![]()
Тадамммм!! Я все понял. Вот они, досадные плоды самообразования!
Тута должен быть явно описан конструктор копирования, иначе компилятор работает по дефолту: Код:
Последний раз редактировалось Smogg; 03.12.2013 в 21:31. |
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 13.11.2013
Сообщений: 149
|
![]()
Явно объявленный конструктор копирования решил проблему?
|
![]() |
![]() |
![]() |
#6 |
Участник клуба
Регистрация: 14.06.2011
Сообщений: 1,138
|
![]()
Ага)
Код:
|
![]() |
![]() |
![]() |
#7 |
Форумчанин
Регистрация: 13.11.2013
Сообщений: 149
|
![]()
Что по-вашему происходит в таком коде?
Код:
|
![]() |
![]() |
![]() |
#8 | |
Участник клуба
Регистрация: 14.06.2011
Сообщений: 1,138
|
![]() Цитата:
1. заходится в функцию ret() 2. в ней конструируется локальный объект a. 3. вызывается return a, каковой на самом деле означает вызов конструктора присваивания b(& a) 4. ипсполняемый код внутри функции закончился и начинается разрушение локальных объектов, т.е. вызов деструктора для а 5. выход из функции ret() 6. исполнение строчки кода, следующей за ClsA b = ret(); |
|
![]() |
![]() |
![]() |
#9 |
Форумчанин
Регистрация: 13.11.2013
Сообщений: 149
|
![]()
Почему-то мой компилятор такое не проглатывает.
1. Т.к. функция ret() возвращает не ссылку, а именно объект, компилятор требует определить конструктор ClsA(ClsA), но при его определении ругается, что такой конструктор создать нельзя ![]() 2. Если определить функцию ret() так, чтобы она возвращала ссылку, компилятор ругается на возврат локальной переменной. Т.е. ни в каком случае GCC-4.8.1 не позволяет вернуть локальный объект. Нет, вру. 2 случай лишь предупреждение, т.е. в принципе работает. Последний раз редактировалось nikmoon; 04.12.2013 в 14:04. |
![]() |
![]() |
![]() |
#10 |
Форумчанин
Регистрация: 13.11.2013
Сообщений: 149
|
![]()
И вообще оказалось достаточно объявить
Код:
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Конструктор класса не хочет принимать в качестве параметра адрес объекта другого класса | Jugger | Помощь студентам | 3 | 05.01.2012 04:10 |
[c++] Создание класса. Используя конструктор. | Actimel | Помощь студентам | 2 | 03.01.2012 11:54 |
передача функции в конструктор класса | Kukurudza | Общие вопросы C/C++ | 6 | 04.12.2011 08:31 |
Конструктор шаблонного класса | Hemul | Общие вопросы C/C++ | 1 | 01.07.2011 20:21 |
Конструктор класса | XPAiN | Общие вопросы Delphi | 2 | 24.01.2010 15:00 |