![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 30.01.2008
Сообщений: 99
|
![]()
В этом коде
Код:
![]() Расставив точки останова выяснил что эта штука появляется при работе методов plus, minus, umn1 и umn2 после возвращения ими значения но до запуска из мэйна следующего метода В чем может быть дело ? |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 25.10.2011
Сообщений: 3,178
|
![]()
Возьмём plus.
В методе создаётся локальная переменная w (вызван new для её массива). Мы с ней работаем, и в конце говорим return w; - при типе возвращаемого значения matrix. Это значит, что w должна копироваться в возвращаемый объект, вызывается matrix::matrix(const matrix& cpy). После чего для w вызывается деструктор, в котором мы говорим delete. Как можно заметить, класс не содержит конструктора копирования matrix::matrix(const matrix& cpy). В этом случае, компилятор генерирует его самостоятельно и самым простым образом: побитово копируя значения полей класса. К сожалению, в данном случае это означает, что копия получает то же самое значение указателя a, для которого мы на выходе из функции вызвали delete. Всё вышеуказанное относится и к работе оператора присваивания, const matrix& matrix::operator=(const matrix& cpy). Последний раз редактировалось Abstraction; 07.11.2011 в 11:23. Причина: смайлики, чтоб их... |
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 30.01.2008
Сообщений: 99
|
![]()
То есть мне надо объявить конструктор копирования, и с помощью него инициализировать возвращаемый методом объект ? А деструктор не уничтожит и этот возвращаемый объект после завершения работы метода ?
И где это следует делать, в самом методе перед возвращением объекта ? Вот так будет корректно ? Код:
Последний раз редактировалось Jugger; 08.11.2011 в 22:20. |
![]() |
![]() |
![]() |
#4 |
Пользователь
Регистрация: 30.01.2008
Сообщений: 99
|
![]()
Сделал вот что
Код:
Код:
![]() |
![]() |
![]() |
![]() |
#5 | |
C++,DirectX/OpenGL
Форумчанин
Регистрация: 09.01.2011
Сообщений: 422
|
![]() Цитата:
Код:
|
|
![]() |
![]() |
![]() |
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Ошибка в использовании методов класса | Jugger | Общие вопросы C/C++ | 2 | 26.10.2011 01:29 |
Описание методов вне класса | Jugger | Общие вопросы C/C++ | 5 | 17.10.2011 20:19 |
Вектор из callback'ов методов класса | Gongled | Общие вопросы C/C++ | 7 | 05.01.2011 16:29 |
массив методов класса | DartDayring | Общие вопросы C/C++ | 0 | 07.12.2010 20:00 |
Использование методов вне класса | prikolist | Общие вопросы C/C++ | 12 | 07.05.2009 13:57 |