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

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

Восстановить пароль Регистрация
 
and
 Аватар для and
20 / 20 / 1
Регистрация: 12.05.2009
Сообщений: 43
30.04.2010, 00:38     Утечка при перегрузки оператора "+" #1
Делаю велосипед под названием 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     Утечка при перегрузки оператора "+"
Посмотрите здесь:

Реализация перегрузки "operator +" для двух объектов C++
Необходимость перегрузки оператора присваивания "=" C++
Перегрузка оператора "++" и "--" в чем может быть причина нарушение прав доступа? C++
Перегрузка оператора "++" и "--" , компилирует, но при запуске программы - ошибка C++
C++ Необработанное исключение в "0x104b2288" в "Matrix.exe": 0xC0000005: Нарушение прав доступа при записи "0xcdcd
Класс "Матрица". Перегрузка оператора "минус" C++
C++ Создание перегрузки метода "operator =" для типа, расположенного в ином namespace
Перегрузка оператора "+", чтобы выполнял "*" C++

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

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

Текущее время: 01:30. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru