У меня есть код:Сложные аргументы в C++ -функциях - Указатели, refenreces или ...?
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
Первое и второе творение дают мне то же самое Vector3D, но я думаю, что это может привести к утечке памяти.
Это правда? И как его решить? Я предполагаю, что это не элегантно, чтобы сделать это таким образом:
...
if(fromLength){
this->end = new Vector3D(*start+*endOrLength);
delete endOrLength;
}else
...
Может, лучше поставить Const Point3d & endOrLenght, я не знаю, что было бы хорошо mannier? То же самое с getStart/getEnd - она должна возвращать указатель:
Point3D * getStart(){return start;}
или просто переменная:
Point3D getStart()(return *start)
?
Спасибо, это исправит проблему с кодом, но, как вы сказали, мой код не самый лучший способ. – PolGraphic
@PolGraphic Я обновил свой ответ, но я не уверен, можете ли вы его использовать. –
Да, вот и все! Спасибо :-) – PolGraphic