我在考虑返回类类型的语义。
考虑一个简单的矢量类。
#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对象的引用。
答案 0 :(得分:1)
Vector2f的有效载荷非常小:2 x浮动成员。可能不值得在堆上分配它们。而是考虑通过引用或函数参数的const引用捕获此类型并按值返回。
单位函数将是:
Vector2f Unit() {
float len = Length();
return Vector2f(X/len,Y/len);
}