C++ 重载运算符并返回相同的对象

标签 c++ operator-overloading

我正在为 Vector 和 Matrices 编写一个类,我想了解当我想重载常见运算符(例如 +、-、* 和/)时如何避免开销和泄漏。

例如:

int main()
{
    Vector3 aVector; //This has an address #1
    Vector3 bVector; //This has another address #2

    //rVector has an address #3
    Vector3 rVector = aVector - bVector; //What will happen here?
}

和 vector 类:

class Vector3
{
    public:
        float vX, vY, vZ;
        Vector3& operator-(const Vector3& vector3)
        {
            //I want to calculate this vector with the "vector3" param
            //But then what do I return?

            //Test 1:
            Vector3 result; //This has an address #4
            result.vX = vX - vector3.vX;
            result.vY = vY - vector3.vY;
            result.vZ = vZ - vector3.vZ;

            return result; //Did I just overwrite address #3?

            //Test 2:
            vX = vX - vector3.vX;
            vY = vY - vector3.vY;
            vZ = vZ - vector3.vZ;

            return (*this); //What happened to address #3? And I just changed this vector's values and I need then again later
        }
}

执行此操作的最佳方法是什么?

编辑:还有一个问题,如果我想这样做:

Vector3 myVector = someVector - Vector3(x, y, z);

如何对构造函数进行编码,使其不做任何...不好的事情? 我想它会创建一个新类,但在上面的句子中使用它后我将无法引用它,这会导致以后出现问题吗?

最佳答案

您的实现没有任何泄漏。当超出函数范围时,您创建的每个 vector 都会被破坏。

关于返回值,建议按值返回(去掉&即可)。

关于你的第二个问题:这不是新的,所以没有泄漏。此外,您不需要引用它,因此没有真正的问题。

关于C++ 重载运算符并返回相同的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18281178/

相关文章:

c++ - System()/windows 命令行命令不会更改目录?

c++ - 'string' 数组的动态分配

c++ - operator + ( ) 重载的返回值

c++ - 为什么下面的代码段返回指针所指向的值而不是指针的地址?

c++ - 输入不带终止字符的可变数据量 C++

c++ - 如何获取样式表设置的Qt中小部件的字体?

c++ - 分配器如何在 MSVC 中工作?

c++ - 需要对名称列表进行排序,如何重载和定义 bool operator <?

C++ 何时在运算符重载函数前使用 &

c++ - 为什么 bool(val) 比 val.operator bool() 更喜欢双重隐式转换?