![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
NULL |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 137 Регистрация: 22.8.2003 Репутация: нет Всего: нет |
Имеется класс, типа такого
в результате будет 1020, что я не так сделал? |
|||
|
||||
Vyacheslav |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 9 Всего: 59 |
Ошибки
1) возможны утечки памяти из-за неправильно реализованного SetC Лучше так C* С::SetC(PSSTRUC st) { if (pSt) delete pSt; pSt = st; return this; } или так, если нужна копия структуры C* С::SetC(PSSTRUC st) { *pSt = *st; return this; } 2) возможна утечка паямяти и попытка двойного освобождения pSt, если использован конструктор копирования. из-за неправильно реализованного конструктора копирования Надо C(const C &st){ pSt = new SSTRUC; *pSt = *st.pSt;} 3) Конструктор копирования у тебя не используется, даже не задействован. Они бы работал, если ты бы написал что-то вроде этого C cl3 =*cl1; А при cl2 = cl1; копируются указатель. В этом случае в cl2 храниться указатель на объект, на который также указывает сд1 и кодом delete cl1; delete cl2; ты пытаешь удалить дважды один и тот же объект. Второй объект у тебя просто теряется Если ты хотел выполнить копирования тебе надо было выполнить *cl2 = *cl1; Но при этом надо определить оператор копирования const C& C::operator=( const C& other) { if ( this != &other ) { *pSt = *other.pSt; } return *this; } Вроде все. Кажется больше ничего не забыл. -------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
NULL |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 137 Регистрация: 22.8.2003 Репутация: нет Всего: нет |
спасибо, все работает, надо было просто перегрузить =
![]() |
|||
|
||||
Vyacheslav |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 9 Всего: 59 |
Если остальное не исправишь, то тоже нарвешься либо на утечки памяти, либо на исключение
-------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |