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

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

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

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

27.04.2012, 19:42. Просмотров 399. Ответов 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.04.2012, 19:42     Класс как аргумент своего же метода
Посмотрите здесь:

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

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

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

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

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

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

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

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

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

Специализация метода темплейтного класса вложенного в темплейтный класс - C++
Есть два темплейтных класса template &lt;bool T2&gt; class B { void b(); } template &lt;&gt; void B&lt;true&gt;::b() {}

Вызов метода производного класса через указатель на базовый класс - C++
Всем привет ! Подскажите почему , при выполнении строки 45 я получаю ошибку ? А именно при выполнении выражения c-&gt;fnz() ...

Преобразование типа при вызове виртуального метода через указатель на базовый класс - C++
Доброго времени суток. Наткнулся на вот такой вопрос в сети и пока что не смог на него ответить, может быть у Вас получится: В каких...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gray_fox
What a waste!
1443 / 1172 / 61
Регистрация: 21.04.2012
Сообщений: 2,449
Завершенные тесты: 3
27.04.2012, 19:57     Класс как аргумент своего же метода #2
y передаёте по значению - создается локальная копия. Т.к. вы не написали конструктор копирования, то компилятор сгенерирует его за вас. А там он просто скопирует значение указателя. Передавайте аргументы по константной ссылке и напишите конструктор копирования и оператор присваивания (или запретите их).
alkagolik
Заблокирован
27.04.2012, 20:01  [ТС]     Класс как аргумент своего же метода #3
да, спасибо. По ссылке то что надо. Надо привыкнуть к их использованию.
Ответ Создать тему
Опции темы

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