Есть ли способ вернуть локальный объект с помощью деструктора? - PullRequest
0 голосов
/ 26 мая 2020

У меня есть класс Foo , у которого есть конструктор, который получает 2 целых числа и создает массив Dynami c в 2D в куче, а деструктор удаляет его. Проблема в том, что я создаю функцию operator +, которая добавляет два значения из 2 объектов, и при возврате нового объекта, содержащего добавление, он вызывает деструктор, делающий внутреннюю переменную, выделенную в куче, свободной.

class foo()
{
    foo() { }
    foo(int a, int b){ ... } // Allocate 2D array
    ~foo() { ... } // Deallocate 2D array
    void read() { ... }
    void operator=(foo& A) { .. }


    foo operator+(foo& A)
    {
        foo ans(2,2);
        // Perform logic to add *this obj with A
        ...
        return ans;
    }
}

int main()
{
    foo A(2,2), B(2,2);
    foo C;
    A.read(); 
    B.read();
    C = A + B;
    return 0;
}

Итак, когда вызывается A + B, вся операция завершается, но при возврате объекта он вызывает деструктор ans и удаляет всю сохраненную информацию.

Одним из способов решения этой проблемы было возвращение указателя в эту "ans" память (выделение ее), но проблема в том, что я не хочу работать с указателями в основной функции, и хранить его в куче только для простых вычислений нехорошо.

Другой способ (который я на самом деле использую) - создать оператор + = , чтобы код в int main получал вот так:

    foo A(2,2), B(2,2);
    A.read(); 
    B.read();
    C = A;
    C += A; 

С помощью этой операции я фактически изменяю сам C и ранее скопировал всю информацию из A в C. Не лучший способ, но это единственное, что мне удалось.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...