From 1f32abb995a04b7c67af6d923fea82436e817de1 Mon Sep 17 00:00:00 2001 From: Laurent Pinchart Date: Tue, 21 May 2019 22:16:23 +0300 Subject: libcamera: camera: Simplify create() implementation Now that the Camera class inherits from std::enable_shared_from_this, we don't need to use std::allocate_shared anymore and can simplify the Camera::create() implementation. This fixes compilation with recent versions of libc++ whose std::allocate_shared implementation isn't compatible with classes that are not publicly constructible. The custom allocator is removed, but a custom deleter is needed as the Camera destructor is private. Signed-off-by: Laurent Pinchart Reviewed-by: Jacopo Mondi Reviewed-by: Kieran Bingham --- src/libcamera/camera.cpp | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) (limited to 'src') diff --git a/src/libcamera/camera.cpp b/src/libcamera/camera.cpp index 0f45ab7e..617ea99c 100644 --- a/src/libcamera/camera.cpp +++ b/src/libcamera/camera.cpp @@ -358,24 +358,17 @@ std::shared_ptr Camera::create(PipelineHandler *pipe, const std::string &name, const std::set &streams) { - struct Allocator : std::allocator { - void construct(void *p, PipelineHandler *pipe, - const std::string &name) + struct Deleter : std::default_delete { + void operator()(Camera *camera) { - ::new(p) Camera(pipe, name); - } - void destroy(Camera *p) - { - p->~Camera(); + delete camera; } }; - std::shared_ptr camera = - std::allocate_shared(Allocator(), pipe, name); - + Camera *camera = new Camera(pipe, name); camera->streams_ = streams; - return camera; + return std::shared_ptr(camera, Deleter()); } /** -- cgit v1.2.1