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

Время жизни объекта - C++

Восстановить пароль Регистрация
 
maddoxx
0 / 0 / 0
Регистрация: 17.02.2013
Сообщений: 24
20.11.2013, 19:44     Время жизни объекта #1
Доброго времени суток, объясните пожалуйста, как можно продлить время жизни объекта, который создан локально.
В данном случае - есть класс одномерный вектор с типом int.
Нужно перегрузить операторы + и = для выполнения след-й операции: с=a+b, где а,b,с - соответственно объекты класса.
Проблема в том, что когда у меня происходит сложение векторов, возвращается ссылка на локальный объект, и, как я понимаю, сразу же после выполнения сложения этот объект уничтожается, поскольку он объявлен локально.
Может быть я ошибаюсь, подскажите пожалуйста.
Часть кода:
Непосредственно сам класс:
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
#ifndef classMatrix_h
#define classMatrix_h
 
#include <iostream>
 
class matrix
{
    int size, error;
    int *ptr;
public:
    matrix();
    matrix(int);
    matrix(matrix &);
    matrix &operator=(matrix &right);
    matrix &operator+(matrix &right);
    void inputMatrix();
    void printMatrix(char name);
    void setError(int);
    int getError();
    void setSize(int);
    int getSize();
    void printError(int);
    ~matrix();
};
 
#endif classMatrix_h
Реализация класса(скопирую только перегрузки что бы было проще):
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
matrix &matrix::operator+(matrix &right)
    {
        matrix tmpMtr(getSize() + right.getSize());
        int count = 0;
        for(int i=0; i<getSize(); i++)
            tmpMtr.ptr[i] = ptr[i];
        for(int i=getSize(); i<tmpMtr.getSize(); i++)
        {
            tmpMtr.ptr[i] = right.ptr[count];
            count++;
        }
        return tmpMtr;
    }
    matrix &matrix::operator=(matrix &right)
    {
        if (this->getSize() < right.getSize())
        {
            delete [] this->ptr;
            this->ptr = new int [right.getSize()];
            this->setSize(right.getSize());
        }
        for(int i=0; i<getSize(); i++)
            this->ptr[i] = right.ptr[i];
        return *this;
    }
И непосредственно главный файл, где вызываю перегрузку:
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
#include <iostream>
#include "classMatrix.h"
 
using namespace std;
 
void main()
{
    cout << "Input size for object a: ";
    int tmpSize;
    cin >> tmpSize;
 
    matrix a(tmpSize);
    a.inputMatrix();
    a.printMatrix('a');
 
    cout << "Input size for object b: ";
    cin >> tmpSize;
 
    matrix b(tmpSize);
    b.inputMatrix();
    b.printMatrix('b');
 
    matrix c(tmpSize);
    (c=a+b).printMatrix('c');
    c.printMatrix('c');
 
    system("pause");
};
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.11.2013, 19:44     Время жизни объекта
Посмотрите здесь:

C++ Время жизни переменных
C++ Область видимости и время жизни переменных внутри класса
Изменение фактического состояния объекта не мгновенно по вызове метода, а через некоторое время C++
C++11 время жизни переменных C++
время жизни временного объекта C++
C++ Выведите в окно приложения прочитанную фамилию и оставшееся "время жизни" до 3000г
Определить время жизни Static переменной C++
C++ Время жизни объектов

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
scenotaph
120 / 120 / 15
Регистрация: 29.03.2013
Сообщений: 237
20.11.2013, 19:49     Время жизни объекта #2
Вы не пробовали возвращать не ссылку на объект, а его копию?
maddoxx
0 / 0 / 0
Регистрация: 17.02.2013
Сообщений: 24
20.11.2013, 19:54  [ТС]     Время жизни объекта #3
Пробовал, но самое странное, что когда я возвращал копию раньше - программа работала до конца и при выходе выдавала ошибку, что то насчет памяти.
Попробовал сейчас - все работает нормально. Ни код ни компьютер не менялся.
Спасибо большое за помощь
Yandex
Объявления
20.11.2013, 19:54     Время жизни объекта
Ответ Создать тему
Опции темы

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