Создание объекта C ++ в файле класса

Я делаю модуль / библиотеку с векторным классом, и я хочу, чтобы он делал это правильно.

class Vector3 {
public:
float x, y, z;
public:
Vector3();
Vector3(float a, float b, float c);
float length();
void normalize();
Vector3* dotproduct(Vector3 *rhs);
Vector3* crossproduct(Vector3 *rhs);
Vector3* add(Vector3 *rhs);
Vector3* subtract(Vector3 *rhs);
};

Мое сомнение в том, как я должен вернуть новый Vector3 после операции.

В настоящее время я динамически выделяю новый Vector3 внутри каждой операции, а затем я возвращаю его.

Когда я использую операцию, у меня есть:

Vector3 *v = v2->crossproduct(v3);

Должен ли я изменить свои операции на:

Vector3 Vector3::crossproduct(Vector3 *rhs){
float a = y * rhs->z - z * rhs->y;
float b = z * rhs->x - x * rhs->z;
float c = x * rhs->y - y * rhs->x;
Vector3 res(a, b, c);
return res ;
}

И использовать:

Vector3 v = v2->crossproduct(v3);

Или я в конечном итоге потеряю вектор?
Так как я пытаюсь сделать библиотеку, как правильно это сделать?
Выделить в стеке или в куче?

2

Решение

Я реализую эти операции следующим образом:

Vector3 Vector3::crossproduct(const Vector3& rhs){
float a = y * rhs.z - z * rhs.y;
float b = z * rhs.x - x * rhs.z;
float c = x * rhs.y - y * rhs.x;
Vector3 res(a, b, c);
return res ;
}

Чтобы использовать этот оператор, вы можете просто использовать этот синтаксис:

Vector v1, v2;
auto product = v1.crossproduct(v2);

Возврат как значение, скорее всего, оптимизируется путем исключения копирования, поэтому вам не нужно об этом беспокоиться. И с тех пор rhs не изменяется, передавая его как const ref& это самый быстрый способ сделать это.

3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector