Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
22 / 22 / 3
Регистрация: 12.05.2009
Сообщений: 43
1

Утечка при перегрузки оператора "+"

30.04.2010, 00:38. Просмотров 449. Ответов 2
Метки нет (Все метки)

Делаю велосипед под названием andString (string)
andString.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class andString
{
    char *sTring;
    unsigned int nLenght;
    
    
public:
    friend ostream &operator<<(ostream &, andString &);
    friend istream &operator>>(istream &, andString &);
 
    //
    andString &operator=(const andString &);//General
    andString &operator=(const char *);
    andString &operator=(const char);
 
    //
    andString &operator+(const andString &);//General !Здесь то и проблемы, со всеми операторами +!
 
    friend andString &operator+(const andString &,const char *);
///....///тд
andString.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <iostream>
using namespace std;
 
#include "andString.h"
 
//
andString::andString()
{
    nLenght = 0;
    sTring = NULL;
}
//
ostream &operator<<(ostream &stream,andString &aStr)
{
    stream<<aStr.sTring;
    return stream;
}
//
istream &operator>>(istream &stream,andString &aStr)
{
    char *sTemp=new char[1024];
    stream>>sTemp;
    delete [] aStr.sTring;
    aStr.nLenght = strlen(sTemp)+1;
    aStr.sTring = new char[aStr.nLenght];
    for(int i=0; i<aStr.nLenght ; ++i)
        aStr.sTring[i] = sTemp[i];
    delete [] sTemp;
    return stream;
}
//////..../////
//Add
//!
andString &andString::operator+(const andString &aStr)
{
    andString *asOpTemp = new andString;
    delete [] asOpTemp->sTring;
    asOpTemp->nLenght = nLenght + aStr.nLenght - 1;
    asOpTemp->sTring = new char[asOpTemp->nLenght];
    for(int i = 0 ; i < nLenght-1 ; ++i)
        asOpTemp->sTring[i] = sTring[i];
    for(int i = 0 ; i < aStr.nLenght ; ++i)
        asOpTemp->sTring[i + nLenght -1] = aStr.sTring[i];
    return *asOpTemp;
}
////.....////
При таком коде operator+ возникает утечка (та и вообще код не самый "красивый")
При перегрузке НЕ должны изменятся левый и правый операнд...
Каким образом можно реализовать оператор?
Может статическими переменными?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.04.2010, 00:38
Ответы с готовыми решениями:

Особенности перегрузки оператора "запятая"
Препод на защите прошлой лабы задал вопрос - чем отличается перегрузка оператора запятая от...

Необходимость перегрузки оператора присваивания "="
Собственно название темы и есть вопрос)) Скажите пожалуйста в чем же заключается эта необходимость?

Перегрузка оператора "++" и "--" , компилирует, но при запуске программы - ошибка
#include &lt;iostream&gt; #include&lt;ctime&gt; #include&lt;stdio.h&gt; #include&lt;locale.h&gt; #include &lt;windows.h&gt;...

Ошибка в реализиции перегрузки операторов "<<",">>"
Доброго времени суток ,в данном коде реализированая на строках 18-22 перегрузка оператора &quot;&gt;&gt;&quot; не...

2
229 / 67 / 11
Регистрация: 02.06.2009
Сообщений: 280
30.04.2010, 16:51 2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
andString operator+(const andString &left, const andString &right)
{
    andString asOpTemp;
    // !! delete [] asOpTemp->sTring; !! - здесь у тебя ваще вылет должен быть
 
    asOpTemp.nLenght = left.nLenght + right.nLenght + 1;
    asOpTemp.sTring = new char[asOpTemp.nLenght];
           ZeroMemory(asOpTemp.sTring, asOpTemp.nLenght);
    strcpy(asOpTemp.sTring, left.sTring);
    strcat(asOpTemp.sTring, right.sTring);
 
    return asOpTemp;
 
}
////.....////
Ф-ция operator+ - френд. + Обязательно нужно реализовать конструктор копирования.
+ Можно реализовать перегрузку присваивания, перегрузку += и ф-цию swap. Тогда код можно вообще упростить и "украсивить".
0
22 / 22 / 3
Регистрация: 12.05.2009
Сообщений: 43
01.05.2010, 00:37  [ТС] 3
Ф-ция operator+ - френд
Абсолютно не решает проблему ....
Операторы += < > <= >= != == и всякие функции у меня реализованы...
Но мне надо толковая реализация оператора +
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.05.2010, 00:37

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно"
В зависимости от времени года &quot;весна&quot;, &quot;лето&quot;, &quot;осень&quot;, &quot;зима&quot; определить погоду &quot;тепло&quot;,...

Перегрузка оператора "++" и "--" в чем может быть причина нарушение прав доступа?
Вот такой вот код #include &lt;iostream&gt; class d { private: int size ; char *n; public: ...

Не правильно работает алгоритм вычитания строк при перегрузке оператора "-"(минус)
Написал алгоритм для перегрузки оператора &quot;-&quot; и в принципе все работает корректно, за исключением...

Почему при выполнении оператора delete возникает ошибка "program.exe has triggered a breakpoint"?
class test { public: void a() { std::cout &lt;&lt; &quot;test::a&quot; &lt;&lt; std::endl; } }; class test2...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.