有没有办法用destructor返回一个本地对象?

问题描述 投票:0回答:1

我有一个类 问题是,我正在创建一个函数operator+,将2个对象的两个值相加,当返回包含添加的新对象时,它会调用destructor,使堆中分配的内部变量释放。

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 "内存(分配),但问题是我不想在主函数中使用指针进行操作,而且仅仅为了一个简单的计算而将其存储在堆中并不好。

另一种方法(我正在实际使用)是通过创建一个 操作者+= 所以int main的代码是这样的。

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

通过这个操作,我实际上是在修改C本身,之前,把所有的信息从A复制到C中。 这不是最好的方法,但这是我唯一能做到的。

c++ class operator-overloading heap lifetime
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.