diff --git a/src/camera.h b/src/camera.h index 1cf73e2..6adf856 100644 --- a/src/camera.h +++ b/src/camera.h @@ -10,11 +10,15 @@ #ifndef __CAMERA_H__ #define __CAMERA_H__ +#include + #include "basics.h" struct Camera { + typedef std::shared_ptr Ptr; + Camera(); Camera(const Camera& other); virtual ~Camera(); diff --git a/src/scene.cc b/src/scene.cc index 92a7da6..53a6910 100644 --- a/src/scene.cc +++ b/src/scene.cc @@ -31,10 +31,7 @@ Scene::Scene() Scene::~Scene() { - if (mCamera) { - delete mCamera; - mCamera = NULL; - } + mCamera.reset(); if (ambient != NULL) { delete ambient; @@ -81,7 +78,10 @@ Scene::get_height() } -Camera* +/* + * Scene::GetCamera -- + */ +Camera::Ptr Scene::GetCamera() const { @@ -89,10 +89,13 @@ Scene::GetCamera() } +/* + * Scene::SetCamera -- + */ void Scene::SetCamera(Camera* camera) { - mCamera = camera; + mCamera.reset(camera); } diff --git a/src/scene.h b/src/scene.h index ec0d18a..762cefb 100644 --- a/src/scene.h +++ b/src/scene.h @@ -36,8 +36,9 @@ public: int get_height() const; void set_height(int h) { height = h; } - Camera* GetCamera() const; + Camera::Ptr GetCamera() const; void SetCamera(Camera* camera); + void SetCamera(Camera::Ptr camera); AmbientLight &get_ambient() const; const Color *get_pixels() const; @@ -55,7 +56,7 @@ private: // Pixel dimensions of the image. int width, height; - Camera *mCamera; + Camera::Ptr mCamera; /* * Ray tracing parameters. max_depth indicates the maximum depth of the ray tree. min_weight indicates the minimum