Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
and
20 / 20 / 1
Регистрация: 12.05.2009
Сообщений: 43
#1

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

30.04.2010, 00:38. Просмотров 337. Ответов 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+ возникает утечка (та и вообще код не самый "красивый")
При перегрузке НЕ должны изменятся левый и правый операнд...
Каким образом можно реализовать оператор?
Может статическими переменными?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.04.2010, 00:38     Утечка при перегрузки оператора "+"
Посмотрите здесь:

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

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

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

Не корректно считает перегрузку оператора "-" после "+" - C++
Доброго дня. Помогите советом. Не корректно считает a - b и a * b , после подсчёта a + b. Понимаю что он сохраняет первое решение в...

Перегрузка оператора "+", чтобы выполнял "*" - C++
Ребят, привет всем, возник такой вопрос: возможно ли перегрузить оператор &quot;+&quot; так, чтоб выполнялось умножение? Например вводится...

Реализация перегрузки "operator +" для двух объектов - C++
С=A+B; Что то не получается в операторе operator+; #include &lt;iostream.h&gt; class MASS { int *num; int n; int...

Создание перегрузки метода "operator =" для типа, расположенного в ином namespace - C++
Здравствуйте. Столкнулся со следующей проблемой которая упрощено выглядит так namespace M{ struct A{ int b; ...

"Утечка " памяти. Да или нет? - C++
Есть фоксовское приложение. Оно в отдельном потоке запускает комсервер, написанный тоже на фоксе, который запускает одну из двух функций...

Ошибка "Утечка памяти" - C++
Привет, народ. При завершении работы программы вылетает ошибка утечки памяти. Код DoubleArr.cpp #include &quot;DoubleArr.h&quot; #include...

Как это работает (недокументированное использование оператора "запятая")? - C++
Нашёл один велосипед в сети, можете объяснить как это работает? Что это за недокументированное использование оператора &quot;запятая&quot;? ...

Алгоритм для реализации оператора "побитовое исключающее ИЛИ" - C++
Помогите пожалуйста не могу делать. Для заданных двух целых чисел предложите описание алгоритма для реализации оператора «побитовое...

Перегрузка оператора "<<" для вывода пользовательских классов - C++
Всем доброго времени суток. Пытаюсь сделать перегрузку оператора &quot;&lt;&lt;&quot; для того, чтобы можно было выводить объекты пользовательского класса...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Alexandoros
228 / 66 / 4
Регистрация: 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. Тогда код можно вообще упростить и "украсивить".
and
20 / 20 / 1
Регистрация: 12.05.2009
Сообщений: 43
01.05.2010, 00:37  [ТС]     Утечка при перегрузки оператора "+" #3
Ф-ция operator+ - френд
Абсолютно не решает проблему ....
Операторы += < > <= >= != == и всякие функции у меня реализованы...
Но мне надо толковая реализация оператора +
Ответ Создать тему
Опции темы

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