返回一个类的新实例

时间:2015-07-13 21:53:36

标签: c++ class

我在考虑返回类类型的语义。

考虑一个简单的矢量类。

#ifndef __VECTOR_H__
#define __VECTOR_H__

#include <cmath>

class Vector2f {

public:
    float X;
    float Y;

    Vector2f() : X(0), Y(0) {}
    Vector2f(int x,int y) : X((float)x), Y((float)y) {}
    Vector2f(float x, float y) : X(x), Y(y) {}

    ~Vector2f() {}
    float Length() { return pow( float(X*X + Y*Y) , 0.5 ); }

    void Unit() {
        //instead of making the current vector the unit vector
        //I would like to return a unit vector
        float len = Length();
        if(len != 1.0) {
            X = X / len;
            Y = Y / len;
        }
        return;
    }


};


#endif

函数Unit()使我当前的向量成为单位向量,但我想我想将单位向量作为一个新的单位向量返回(我可能不想丢失旧的向量)。 / p>

我开始认为这会成为内存管理的噩梦,因为无论何时调用Unit(),它都会分配内存,以后必须删除。看起来似乎是一种愚蠢的方式。

Vector2f Unit() {
    float len = Length();
    return new Vector2f(X/len,Y/len);
}

有更好的方法吗?我认为函数可能需要一个Vector2f对象的引用。

1 个答案:

答案 0 :(得分:1)

Vector2f的有效载荷非常小:2 x浮动成员。可能不值得在堆上分配它们。而是考虑通过引用或函数参数的const引用捕获此类型并按值返回。

单位函数将是:

Vector2f Unit() {
  float len = Length();
  return Vector2f(X/len,Y/len);
}