एचपीपी:
class Camera {
public:
Camera(float FOV, float nearPlane, float farPlane);
std::unique_ptr<glm::mat4x4> getProjectionMatrix();
private:
std::unique_ptr<glm::mat4x4> projectionMatrix;
};
सीपीपी:
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);
}
दो टिप्पणी पंक्तियों को देखें। कार्यक्रम संकलित करेगा कि उन पर टिप्पणी की गई है या नहीं, लेकिन यदि वे हैं, तो डेटा दूषित हो जाएगा।
मैं एक गेटर कैसे लिख सकता हूं जो एक अद्वितीय_ptr लौटाता है जो कक्षा का एक निजी सदस्य है? मैं कंस्ट्रक्टर में unique_ptr को ठीक से कैसे सेट करूं?
1 उत्तर
यहां एक बेहतर विचार है: अनावश्यक रूप से स्मृति आवंटित करना बंद करें। Camera
को सीधे glm::mat4x4
स्टोर करें, unique_ptr
के रूप में नहीं। सी ++ जावा नहीं है; आपको new
के साथ सब कुछ आवंटित करने की आवश्यकता नहीं है। आपका सभी कोड बहुत आसान हो जाता है:
Camera::Camera(float FOV, float nearPlane, float farPlane)
: projectionMatrix(glm::perspective(FOV, (DisplayManager::displayWidth / DisplayManager::displayHeight), nearPlane, farPlane))
{
}
glm::mat4x4 &Camera::getProjectionMatrix() { return projectionMatrix; }
हालांकि, अगर आपको Camera
में unique_ptr
का बिल्कुल उपयोग करना है, तो आपको एक संदर्भ वापस करना चाहिए, न कि एक स्मार्ट पॉइंटर:
glm::mat4x4 &Camera::getProjectionMatrix() { return *projectionMatrix; }
संबंधित सवाल
नए सवाल
c++
C ++ एक सामान्य-प्रयोजन प्रोग्रामिंग भाषा है। यह मूल रूप से C के विस्तार के रूप में डिज़ाइन किया गया था और इसमें एक समान सिंटैक्स है, लेकिन यह अब पूरी तरह से अलग भाषा है। C ++ कंपाइलर के साथ संकलित कोड के बारे में प्रश्नों के लिए इस टैग का उपयोग करें। विशिष्ट मानक संशोधन [C ++ 11], [C ++ 14], [C ++ 17], [C ++ 20] या [C ++ 23], आदि से संबंधित प्रश्नों के लिए संस्करण-विशिष्ट टैग का उपयोग करें। ।
unique_ptr
क्यों वापस करना चाहते हैं जिसका उपयोग किस लिए किया जाएगा?Camera
से हटाना चाहते हैं? मुझे संदेह है कि आपको एक कच्चा सूचक लौटाना चाहिए यदि आप जानते हैं किCamera
के दायरे से बाहर हो जाने के बाद इसका उपयोग नहीं किया जाएगा। या यहां तक कि मैट्रिक्स का संदर्भ भी।