gpt4 book ai didi

c++ - C++ 函数中的复杂参数 - 指针、引用或...?

转载 作者:太空宇宙 更新时间:2023-11-04 15:24:44 27 4
gpt4 key购买 nike

我有代码:

class Vector3D : public Vector{
protected:
Point3D * start;
Point3D * end;

public:
~Vector3D(){delete start; delete end;}
Vector3D(Point3D * start, Point3D * endOrLength, bool fromLength){
this->start = start;
if(fromLength){
this->end = new Vector3D(*start+*endOrLength); //the operator '+' is defined but I won't put it here,
//because it's not important now
}else
this->end = endOrLength;
}

Point3D * getStart(){return start;}
Point3D * getEnd(){return end;}
};

现在,我有了代码:

Vector3D v(new Point3D(1,2,3), new Point3D(2,3,4), 0); //FIRST CREATION
Vector3D v(new Point3D(1,2,3), new Point3D(1,1,1), 1); //SECOND CREATION

First 和 Second creation 给了我相同的 Vector3D,但我认为它可能会产生内存泄漏。

这是真的吗? 以及如何解决它?我想这样做并不优雅:

...
if(fromLength){
this->end = new Vector3D(*start+*endOrLength);
delete endOrLength;
}else
...

也许放入 const Point3D &endOrLenght 会更好,我不知道什么是好的方式?与 getStart/getEnd 相同 - 它应该返回指针:

Point3D * getStart(){return start;}

或只是变量:

Point3D getStart()(return *start)

?

最佳答案

首先,我不会像 3d 点那样动态分配值对象。只需使用值,这可能会为您省去很多麻烦。其次,如果您有两种构造 vector 的方法,只需提供两个不同的构造函数即可:

class Vector3D {
public:
Vector3D( const Point3D& s, const Point3D& e )
: start( s )
, end( e )
{
}

Vector3D( const Point3D& s, const Vector3D& v )
: start( s )
, end( s + v )
{
}
}
private:
Point3D start;
Point3D end;
};

让一个函数根据一个函数参数做两件不同的事情,从调用方来说甚至很难理解。很难记住最后一个 1 或 0 的用途。

亲切的问候,托尔斯滕

关于c++ - C++ 函数中的复杂参数 - 指针、引用或...?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11292936/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com