cam: Use std::unique_ptr<> to manage CameraManager

Store the CameraManager instance in a unique_ptr to simplify memory
management and avoid leaks.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
This commit is contained in:
Laurent Pinchart 2021-07-06 07:37:14 +03:00
parent 8519df23a9
commit 033cac7f6d

View file

@ -25,7 +25,6 @@ class CamApp
{ {
public: public:
CamApp(); CamApp();
~CamApp();
static CamApp *instance(); static CamApp *instance();
@ -49,8 +48,8 @@ private:
static CamApp *app_; static CamApp *app_;
OptionsParser::Options options_; OptionsParser::Options options_;
CameraManager *cm_;
std::unique_ptr<CameraManager> cm_;
std::unique_ptr<CameraSession> session_; std::unique_ptr<CameraSession> session_;
EventLoop loop_; EventLoop loop_;
@ -59,16 +58,10 @@ private:
CamApp *CamApp::app_ = nullptr; CamApp *CamApp::app_ = nullptr;
CamApp::CamApp() CamApp::CamApp()
: cm_(nullptr)
{ {
CamApp::app_ = this; CamApp::app_ = this;
} }
CamApp::~CamApp()
{
delete cm_;
}
CamApp *CamApp::instance() CamApp *CamApp::instance()
{ {
return CamApp::app_; return CamApp::app_;
@ -82,7 +75,7 @@ int CamApp::init(int argc, char **argv)
if (ret < 0) if (ret < 0)
return ret; return ret;
cm_ = new CameraManager(); cm_ = std::make_unique<CameraManager>();
ret = cm_->start(); ret = cm_->start();
if (ret) { if (ret) {
@ -92,7 +85,7 @@ int CamApp::init(int argc, char **argv)
} }
if (options_.isSet(OptCamera)) { if (options_.isSet(OptCamera)) {
session_ = std::make_unique<CameraSession>(cm_, options_); session_ = std::make_unique<CameraSession>(cm_.get(), options_);
if (!session_->isValid()) { if (!session_->isValid()) {
std::cout << "Failed to create camera session" << std::endl; std::cout << "Failed to create camera session" << std::endl;
cleanup(); cleanup();