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

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

Войти
Регистрация
Восстановить пароль
 
alkagolik
Заблокирован
#1

Класс как аргумент своего же метода - C++

27.04.2012, 19:42. Просмотров 402. Ответов 2
Метки нет (Все метки)

В примере ниже происходит лишний (по замыслу не нужный) вызов деструктора. Вопрос в следующем: как в методе класса в качестве аргумента передавать объект этого же типа (класса)? Может просто деструктор неграмотно составлен? В данном примере происходит двойное освобождение памяти, выделенной для объекта foo y (в методе add( foo y ) ).
пример
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
#include <iostream>
#include <iomanip>
typedef unsigned int my_type;
const my_type siz = 5;
 
class foo {
    private:
        int *x;
    public:
        foo(){
            x = new int[ siz ];
            for ( my_type i = 0; i < siz; ++i )
                x[ i ] = i;
        }
        ~foo(){
            delete [] x;
        }
 
        void add( foo y ){
            for ( my_type i = 0; i < siz; ++i )
                x[ i ] += y.x[ i ];
        }           /********* тут вызывается деструктор foo y *********/
 
        void print_foo(){
            for ( my_type i = 0; i < siz; ++i )
                std::cout << std::setw( 3 ) << x[ i ];
            std::cout << std::endl;
        }
};
 
int main() {
 
    foo a, b;
    a.print_foo();
    b.print_foo();
    a.add( b );
    a.print_foo();
    return 0;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.04.2012, 19:42
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Класс как аргумент своего же метода (C++):

Функция как аргумент шаблонного метода класса - C++
Пытаюсь передать функцию для сравнения в сортировке слиянием, но что-то не получается. Подскажите, как исправить этот код, чтобы сортировка...

Класс как аргумент функции - C++
Доброго времени суток:) Набрёл на такой пример в openGL и не могу понять как он робит, подскажите. Вот описание ф-ции: void...

Абстрактный класс, как аргумент функции - C++
добрый день. есть базовый класс Tag внем строковое поле Name есть производные от него класы SmplTag со строковым полем Value и класс...

Как сделать чтобы класс возвращал значение своего поля? - C++
Возможно я не верно выразился, есть класс: class Monstr { String name; int ammo; }; как сделать чтобы при: Monstr...

Описать класс многочлен, с полями степень, аргумент и коэффициенты - C++
Всем привет! Помогите, пожалуйста, выполнить лабораторку. Составьте описание класса, объявив объекты класса и продемонстрировать работу...

Создайте класс со специальной версией оператора new, получающей второй аргумент типа string - C++
Создайте класс со специальной версией оператора new, получающей второй аргумент типа string. Этот класс должен содержать переменную static...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
gray_fox
What a waste!
1520 / 1223 / 70
Регистрация: 21.04.2012
Сообщений: 2,560
Завершенные тесты: 3
27.04.2012, 19:57 #2
y передаёте по значению - создается локальная копия. Т.к. вы не написали конструктор копирования, то компилятор сгенерирует его за вас. А там он просто скопирует значение указателя. Передавайте аргументы по константной ссылке и напишите конструктор копирования и оператор присваивания (или запретите их).
1
alkagolik
Заблокирован
27.04.2012, 20:01  [ТС] #3
да, спасибо. По ссылке то что надо. Надо привыкнуть к их использованию.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.04.2012, 20:01
Привет! Вот еще темы с ответами:

Добавление нового метода в класс - C++
Всем доброго времени суток. Редко обращаюсь за помощью, но тут мне без неё не обойтись. И сразу к сути. Наша программа состоит из...

Есть класс A и класс B, класс B вложен в класс A и вложен в него, как классу B получить доступ к переменным класса A просто по имени? - C++
На самом деле ничё фантастического я не прошу, ведь: template &lt;class T&gt; class matrix { friend class diagonal; ...

Сложности с переносом метода из класса в класс - C++
Не могу перенести метод класса из одного в другой template&lt; class T &gt; inline bool write_varibal(T var); template&lt; class T &gt; inline...

вызов метода у указателя на указатель на класс - C++
Доброго времени суток! Простите за, возможно, глупый вопрос и/или его неточную формулировку, но вот что есть: class parent { ...


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

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

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