HPP zurückzukehren Failing:eine unique_ptr
class Camera {
public:
Camera(float FOV, float nearPlane, float farPlane);
std::unique_ptr<glm::mat4x4> getProjectionMatrix();
private:
std::unique_ptr<glm::mat4x4> projectionMatrix;
};
CPP:
Camera::Camera(float FOV, float nearPlane, float farPlane) {
float aspectRatio = DisplayManager::displayWidth/DisplayManager::displayHeight;
projectionMatrix = std::make_unique<glm::mat4x4>();
*projectionMatrix = glm::perspective(FOV, aspectRatio, nearPlane, farPlane);
}
std::unique_ptr<glm::mat4x4> Camera::getProjectionMatrix() {
//std::unique_ptr<glm::mat4x4> projectionMatrix = std::make_unique<glm::mat4x4>();
//*projectionMatrix = glm::perspective(90.0f, 1.333f, 0.1f, 1000.0f);
return std::move(projectionMatrix);
}
Blick auf die beiden kommentierten Zeilen. Das Programm wird kompilieren, ob sie auskommentiert sind oder nicht, aber wenn dies der Fall ist, werden die Daten beschädigt.
Wie kann ich einen Getter schreiben, der ein unique_ptr zurückgibt, das ein privates Mitglied der Klasse ist? Wie setze ich unique_ptr im Konstruktor richtig?
Warum wollen Sie return a 'unique_ptr' wofür wird es verwendet? – Galik
Was machst du mit dieser Projektionsmatrix? Es scheint mir, als wären Sie in Ordnung, wenn Sie einen Observer-Zeiger zurückgeben, anstatt ihn in den Nur-Zuweisungs-Status zu überführen. – krzaq
Der Observer-Zeiger ist ebenfalls in Ordnung. Ich muss die Matrix an den Renderer übergeben, damit sie in einen Shader geladen werden kann. – Karlovsky120