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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Динамический массив и работа с файлами http://www.cyberforum.ru/cpp-beginners/thread123721.html
Было дано задание: Массив определять как динамический. Исходные данные и результаты размещать в текстовых файлах. Обработку массивов оформить в виде функций. Элемент матрицы называется локальным минимумом, если он строго меньше всех имеющихся у него соседей. Подсчитать количество локальных минимумов заданной матрицы размером 10 на 10. Найти сумму модулей элементов, расположенных выше главной...
C++ При добровольном страховании домашнего имущества по договорам, составленным на срок менее года, страховые платежи вносятся в размере: При добровольном страховании домашнего имущества по договорам, составленным на срок менее года, страховые платежи вносятся в размере: 30% сумм годового платежа при страховании на 2 месяца; 40% - 3 месяца; 50% - 4 месяца; 60% - 5 месяцев; 70% - 6 месяцев; 75% - 7 месяцев; 80% - 8 месяцев; 85% - 9 месяцев; 90% - 10 месяцев; 95% - 11 месяцев. Определить размер платежа в зависимости от условий... http://www.cyberforum.ru/cpp-beginners/thread123720.html
C++ Изучение С++!
Помогите, пожалуйста! Хочу научиться программированию. Подскажите с чего мне начать! Какая литература очень легка в освоении и эффективеа при обучении?
C++ вычислить k-тое число последовательности целых простых чисел
Уважаемые эксперты, пожалуйста подскажите как правильно написать программу. Необходимо вычислить k-тое число последовательности целых простых чисел (где k>1) вот то что я сам накосячил: #include<stdio.h> #include<math.h> #include<conio.h> #include <stdlib.h> int main() { clrscr;
C++ Самый редко встречаемый символ http://www.cyberforum.ru/cpp-beginners/thread123689.html
Задан массив A. Найти самый редко встречаемый символ. Может быть пригодится кому, но вот исходник задачи обратной - самый часто встречаемый символ. #include <iostream.h> int main() { int i,j,S,SPred=0; char a,sim1,sim2; for(i=0;i<32;i++) cin>>a;
C++ Вывести все четырехзначные числа, в десятичной записи которых нет двух одинаковых цифр. Вот, собственно и условие: Вывести все четырехзначные числа, в десятичной записи которых нет двух одинаковых цифр. Пожалуйста, помогите решить. подробнее

Показать сообщение отдельно
and
 Аватар для and
20 / 20 / 1
Регистрация: 12.05.2009
Сообщений: 43
30.04.2010, 00:38     Утечка при перегрузки оператора "+"
Делаю велосипед под названием 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+ возникает утечка (та и вообще код не самый "красивый")
При перегрузке НЕ должны изменятся левый и правый операнд...
Каким образом можно реализовать оператор?
Может статическими переменными?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 14:02. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru