[libcamera-devel,v2,5/6] libcamera: Utilise LIBCAMERA_DISABLE_COPY
diff mbox series

Message ID 20210211133444.764808-6-kieran.bingham@ideasonboard.com
State Accepted
Headers show
Series
  • Delete Copy-Move-Assign
Related show

Commit Message

Kieran Bingham Feb. 11, 2021, 1:34 p.m. UTC
Replace existing use cases where the copy constructor and copy
assignment operator are deleted with the LIBCAMERA_DISABLE_COPY
statement

Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
---
 include/libcamera/camera.h                      | 6 +++---
 include/libcamera/camera_manager.h              | 4 ++--
 include/libcamera/controls.h                    | 7 +++----
 include/libcamera/framebuffer_allocator.h       | 7 ++++---
 include/libcamera/internal/byte_stream_buffer.h | 4 ++--
 include/libcamera/internal/camera_sensor.h      | 6 +++---
 include/libcamera/internal/file.h               | 6 +++---
 include/libcamera/internal/log.h                | 6 +++++-
 include/libcamera/internal/pipeline_handler.h   | 4 ++--
 include/libcamera/internal/v4l2_subdevice.h     | 5 +++--
 include/libcamera/internal/v4l2_videodevice.h   | 6 +++---
 include/libcamera/request.h                     | 5 +++--
 12 files changed, 36 insertions(+), 30 deletions(-)

Comments

Laurent Pinchart Feb. 11, 2021, 9:14 p.m. UTC | #1
Hi Kieran,

Thank you for the patch.

On Thu, Feb 11, 2021 at 01:34:43PM +0000, Kieran Bingham wrote:
> Replace existing use cases where the copy constructor and copy
> assignment operator are deleted with the LIBCAMERA_DISABLE_COPY
> statement
> 
> Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
> ---
>  include/libcamera/camera.h                      | 6 +++---
>  include/libcamera/camera_manager.h              | 4 ++--
>  include/libcamera/controls.h                    | 7 +++----
>  include/libcamera/framebuffer_allocator.h       | 7 ++++---
>  include/libcamera/internal/byte_stream_buffer.h | 4 ++--
>  include/libcamera/internal/camera_sensor.h      | 6 +++---
>  include/libcamera/internal/file.h               | 6 +++---
>  include/libcamera/internal/log.h                | 6 +++++-
>  include/libcamera/internal/pipeline_handler.h   | 4 ++--
>  include/libcamera/internal/v4l2_subdevice.h     | 5 +++--
>  include/libcamera/internal/v4l2_videodevice.h   | 6 +++---
>  include/libcamera/request.h                     | 5 +++--
>  12 files changed, 36 insertions(+), 30 deletions(-)
> 
> diff --git a/include/libcamera/camera.h b/include/libcamera/camera.h
> index cff9f46e801b..568740a37778 100644
> --- a/include/libcamera/camera.h
> +++ b/include/libcamera/camera.h
> @@ -81,9 +81,6 @@ public:
>  					      const std::string &id,
>  					      const std::set<Stream *> &streams);
>  
> -	Camera(const Camera &) = delete;
> -	Camera &operator=(const Camera &) = delete;
> -
>  	const std::string &id() const;
>  
>  	Signal<Request *, FrameBuffer *> bufferCompleted;
> @@ -109,6 +106,9 @@ public:
>  private:
>  	Camera(PipelineHandler *pipe, const std::string &id,
>  	       const std::set<Stream *> &streams);
> +
> +	LIBCAMERA_DISABLE_COPY(Camera);

Let's move this right after "private:" for consistency.

> +
>  	~Camera();
>  
>  	friend class PipelineHandler;
> diff --git a/include/libcamera/camera_manager.h b/include/libcamera/camera_manager.h
> index 7b8e533fadd6..467cfd0ac4ac 100644
> --- a/include/libcamera/camera_manager.h
> +++ b/include/libcamera/camera_manager.h
> @@ -25,8 +25,6 @@ class CameraManager : public Object, public Extensible
>  	LIBCAMERA_DECLARE_PRIVATE(CameraManager)
>  public:
>  	CameraManager();
> -	CameraManager(const CameraManager &) = delete;
> -	CameraManager &operator=(const CameraManager &) = delete;
>  	~CameraManager();
>  
>  	int start();
> @@ -46,6 +44,8 @@ public:
>  	Signal<std::shared_ptr<Camera>> cameraRemoved;
>  
>  private:
> +	LIBCAMERA_DISABLE_COPY(CameraManager);
> +
>  	static const std::string version_;
>  	static CameraManager *self_;
>  };
> diff --git a/include/libcamera/controls.h b/include/libcamera/controls.h
> index 3b7f3347761e..a5c9bda28661 100644
> --- a/include/libcamera/controls.h
> +++ b/include/libcamera/controls.h
> @@ -14,6 +14,7 @@
>  #include <unordered_map>
>  #include <vector>
>  
> +#include <libcamera/class.h>
>  #include <libcamera/geometry.h>
>  #include <libcamera/span.h>
>  
> @@ -220,8 +221,7 @@ public:
>  	ControlType type() const { return type_; }
>  
>  private:
> -	ControlId &operator=(const ControlId &) = delete;
> -	ControlId(const ControlId &) = delete;
> +	LIBCAMERA_DISABLE_COPY(ControlId);

This, and Control, should use LIBCAMERA_DISABLE_COPY_AND_MOVE. You can
do so in an additional patch, or split this change out to a patch that
uses the macro and changes the semantics in one go.

Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>

>  
>  	unsigned int id_;
>  	std::string name_;
> @@ -260,8 +260,7 @@ public:
>  	}
>  
>  private:
> -	Control(const Control &) = delete;
> -	Control &operator=(const Control &) = delete;
> +	LIBCAMERA_DISABLE_COPY(Control);
>  };
>  
>  class ControlInfo
> diff --git a/include/libcamera/framebuffer_allocator.h b/include/libcamera/framebuffer_allocator.h
> index a96aaeae58ce..9e42de280c98 100644
> --- a/include/libcamera/framebuffer_allocator.h
> +++ b/include/libcamera/framebuffer_allocator.h
> @@ -11,6 +11,8 @@
>  #include <memory>
>  #include <vector>
>  
> +#include <libcamera/class.h>
> +
>  namespace libcamera {
>  
>  class Camera;
> @@ -21,9 +23,6 @@ class FrameBufferAllocator
>  {
>  public:
>  	FrameBufferAllocator(std::shared_ptr<Camera> camera);
> -	FrameBufferAllocator(const FrameBufferAllocator &) = delete;
> -	FrameBufferAllocator &operator=(const FrameBufferAllocator &) = delete;
> -
>  	~FrameBufferAllocator();
>  
>  	int allocate(Stream *stream);
> @@ -33,6 +32,8 @@ public:
>  	const std::vector<std::unique_ptr<FrameBuffer>> &buffers(Stream *stream) const;
>  
>  private:
> +	LIBCAMERA_DISABLE_COPY(FrameBufferAllocator);
> +
>  	std::shared_ptr<Camera> camera_;
>  	std::map<Stream *, std::vector<std::unique_ptr<FrameBuffer>>> buffers_;
>  };
> diff --git a/include/libcamera/internal/byte_stream_buffer.h b/include/libcamera/internal/byte_stream_buffer.h
> index db59577dc332..ec8b0b2ada86 100644
> --- a/include/libcamera/internal/byte_stream_buffer.h
> +++ b/include/libcamera/internal/byte_stream_buffer.h
> @@ -11,6 +11,7 @@
>  #include <stdint.h>
>  #include <type_traits>
>  
> +#include <libcamera/class.h>
>  #include <libcamera/span.h>
>  
>  namespace libcamera {
> @@ -65,8 +66,7 @@ public:
>  	}
>  
>  private:
> -	ByteStreamBuffer(const ByteStreamBuffer &other) = delete;
> -	ByteStreamBuffer &operator=(const ByteStreamBuffer &other) = delete;
> +	LIBCAMERA_DISABLE_COPY(ByteStreamBuffer);
>  
>  	void setOverflow();
>  
> diff --git a/include/libcamera/internal/camera_sensor.h b/include/libcamera/internal/camera_sensor.h
> index c8f81882a958..9d26bd24a321 100644
> --- a/include/libcamera/internal/camera_sensor.h
> +++ b/include/libcamera/internal/camera_sensor.h
> @@ -11,6 +11,7 @@
>  #include <string>
>  #include <vector>
>  
> +#include <libcamera/class.h>
>  #include <libcamera/controls.h>
>  #include <libcamera/geometry.h>
>  
> @@ -45,9 +46,6 @@ public:
>  	explicit CameraSensor(const MediaEntity *entity);
>  	~CameraSensor();
>  
> -	CameraSensor(const CameraSensor &) = delete;
> -	CameraSensor &operator=(const CameraSensor &) = delete;
> -
>  	int init();
>  
>  	const std::string &model() const { return model_; }
> @@ -74,6 +72,8 @@ protected:
>  	std::string logPrefix() const override;
>  
>  private:
> +	LIBCAMERA_DISABLE_COPY(CameraSensor);
> +
>  	int generateId();
>  	int validateSensorDriver();
>  	void initVimcDefaultProperties();
> diff --git a/include/libcamera/internal/file.h b/include/libcamera/internal/file.h
> index 9b6d011f5e9d..2f75aaf00dab 100644
> --- a/include/libcamera/internal/file.h
> +++ b/include/libcamera/internal/file.h
> @@ -11,6 +11,7 @@
>  #include <string>
>  #include <sys/types.h>
>  
> +#include <libcamera/class.h>
>  #include <libcamera/span.h>
>  
>  namespace libcamera {
> @@ -34,9 +35,6 @@ public:
>  	File();
>  	~File();
>  
> -	File(const File &) = delete;
> -	File &operator=(const File &) = delete;
> -
>  	const std::string &fileName() const { return name_; }
>  	void setFileName(const std::string &name);
>  	bool exists() const;
> @@ -62,6 +60,8 @@ public:
>  	static bool exists(const std::string &name);
>  
>  private:
> +	LIBCAMERA_DISABLE_COPY(File);
> +
>  	void unmapAll();
>  
>  	std::string name_;
> diff --git a/include/libcamera/internal/log.h b/include/libcamera/internal/log.h
> index 4b10087a4718..5c44d623797a 100644
> --- a/include/libcamera/internal/log.h
> +++ b/include/libcamera/internal/log.h
> @@ -10,6 +10,8 @@
>  #include <chrono>
>  #include <sstream>
>  
> +#include <libcamera/class.h>
> +
>  #include "libcamera/internal/utils.h"
>  
>  namespace libcamera {
> @@ -57,7 +59,7 @@ public:
>  		   LogSeverity severity);
>  	LogMessage(const char *fileName, unsigned int line,
>  		   const LogCategory &category, LogSeverity severity);
> -	LogMessage(const LogMessage &) = delete;
> +
>  	LogMessage(LogMessage &&);
>  	~LogMessage();
>  
> @@ -70,6 +72,8 @@ public:
>  	const std::string msg() const { return msgStream_.str(); }
>  
>  private:
> +	LIBCAMERA_DISABLE_COPY(LogMessage);
> +
>  	void init(const char *fileName, unsigned int line);
>  
>  	std::ostringstream msgStream_;
> diff --git a/include/libcamera/internal/pipeline_handler.h b/include/libcamera/internal/pipeline_handler.h
> index 0748f8634608..d5913eae88ca 100644
> --- a/include/libcamera/internal/pipeline_handler.h
> +++ b/include/libcamera/internal/pipeline_handler.h
> @@ -15,6 +15,7 @@
>  #include <sys/types.h>
>  #include <vector>
>  
> +#include <libcamera/class.h>
>  #include <libcamera/controls.h>
>  #include <libcamera/object.h>
>  #include <libcamera/stream.h>
> @@ -49,8 +50,7 @@ public:
>  	std::unique_ptr<IPAProxy> ipa_;
>  
>  private:
> -	CameraData(const CameraData &) = delete;
> -	CameraData &operator=(const CameraData &) = delete;
> +	LIBCAMERA_DISABLE_COPY(CameraData);
>  };
>  
>  class PipelineHandler : public std::enable_shared_from_this<PipelineHandler>,
> diff --git a/include/libcamera/internal/v4l2_subdevice.h b/include/libcamera/internal/v4l2_subdevice.h
> index eb25fa2fd01b..f983ae6302bb 100644
> --- a/include/libcamera/internal/v4l2_subdevice.h
> +++ b/include/libcamera/internal/v4l2_subdevice.h
> @@ -11,6 +11,7 @@
>  #include <string>
>  #include <vector>
>  
> +#include <libcamera/class.h>
>  #include <libcamera/geometry.h>
>  
>  #include "libcamera/internal/formats.h"
> @@ -41,8 +42,6 @@ public:
>  	};
>  
>  	explicit V4L2Subdevice(const MediaEntity *entity);
> -	V4L2Subdevice(const V4L2Subdevice &) = delete;
> -	V4L2Subdevice &operator=(const V4L2Subdevice &) = delete;
>  	~V4L2Subdevice();
>  
>  	int open();
> @@ -68,6 +67,8 @@ protected:
>  	std::string logPrefix() const override;
>  
>  private:
> +	LIBCAMERA_DISABLE_COPY(V4L2Subdevice);
> +
>  	std::vector<unsigned int> enumPadCodes(unsigned int pad);
>  	std::vector<SizeRange> enumPadSizes(unsigned int pad,
>  					    unsigned int code);
> diff --git a/include/libcamera/internal/v4l2_videodevice.h b/include/libcamera/internal/v4l2_videodevice.h
> index 626dfbcd6113..f8da608603ef 100644
> --- a/include/libcamera/internal/v4l2_videodevice.h
> +++ b/include/libcamera/internal/v4l2_videodevice.h
> @@ -17,6 +17,7 @@
>  #include <linux/videodev2.h>
>  
>  #include <libcamera/buffer.h>
> +#include <libcamera/class.h>
>  #include <libcamera/geometry.h>
>  #include <libcamera/pixel_format.h>
>  #include <libcamera/signal.h>
> @@ -175,11 +176,8 @@ public:
>  
>  	explicit V4L2VideoDevice(const std::string &deviceNode);
>  	explicit V4L2VideoDevice(const MediaEntity *entity);
> -	V4L2VideoDevice(const V4L2VideoDevice &) = delete;
>  	~V4L2VideoDevice();
>  
> -	V4L2VideoDevice &operator=(const V4L2VideoDevice &) = delete;
> -
>  	int open();
>  	int open(int handle, enum v4l2_buf_type type);
>  	void close();
> @@ -219,6 +217,8 @@ protected:
>  	std::string logPrefix() const override;
>  
>  private:
> +	LIBCAMERA_DISABLE_COPY(V4L2VideoDevice);
> +
>  	int getFormatMeta(V4L2DeviceFormat *format);
>  	int trySetFormatMeta(V4L2DeviceFormat *format, bool set);
>  
> diff --git a/include/libcamera/request.h b/include/libcamera/request.h
> index 655b1324bae8..3354ae9083f1 100644
> --- a/include/libcamera/request.h
> +++ b/include/libcamera/request.h
> @@ -12,6 +12,7 @@
>  #include <stdint.h>
>  #include <unordered_set>
>  
> +#include <libcamera/class.h>
>  #include <libcamera/controls.h>
>  #include <libcamera/signal.h>
>  
> @@ -39,8 +40,6 @@ public:
>  	using BufferMap = std::map<const Stream *, FrameBuffer *>;
>  
>  	Request(Camera *camera, uint64_t cookie = 0);
> -	Request(const Request &) = delete;
> -	Request &operator=(const Request &) = delete;
>  	~Request();
>  
>  	void reuse(ReuseFlag flags = Default);
> @@ -57,6 +56,8 @@ public:
>  	bool hasPendingBuffers() const { return !pending_.empty(); }
>  
>  private:
> +	LIBCAMERA_DISABLE_COPY(Request);
> +
>  	friend class PipelineHandler;
>  
>  	void complete();

Patch
diff mbox series

diff --git a/include/libcamera/camera.h b/include/libcamera/camera.h
index cff9f46e801b..568740a37778 100644
--- a/include/libcamera/camera.h
+++ b/include/libcamera/camera.h
@@ -81,9 +81,6 @@  public:
 					      const std::string &id,
 					      const std::set<Stream *> &streams);
 
-	Camera(const Camera &) = delete;
-	Camera &operator=(const Camera &) = delete;
-
 	const std::string &id() const;
 
 	Signal<Request *, FrameBuffer *> bufferCompleted;
@@ -109,6 +106,9 @@  public:
 private:
 	Camera(PipelineHandler *pipe, const std::string &id,
 	       const std::set<Stream *> &streams);
+
+	LIBCAMERA_DISABLE_COPY(Camera);
+
 	~Camera();
 
 	friend class PipelineHandler;
diff --git a/include/libcamera/camera_manager.h b/include/libcamera/camera_manager.h
index 7b8e533fadd6..467cfd0ac4ac 100644
--- a/include/libcamera/camera_manager.h
+++ b/include/libcamera/camera_manager.h
@@ -25,8 +25,6 @@  class CameraManager : public Object, public Extensible
 	LIBCAMERA_DECLARE_PRIVATE(CameraManager)
 public:
 	CameraManager();
-	CameraManager(const CameraManager &) = delete;
-	CameraManager &operator=(const CameraManager &) = delete;
 	~CameraManager();
 
 	int start();
@@ -46,6 +44,8 @@  public:
 	Signal<std::shared_ptr<Camera>> cameraRemoved;
 
 private:
+	LIBCAMERA_DISABLE_COPY(CameraManager);
+
 	static const std::string version_;
 	static CameraManager *self_;
 };
diff --git a/include/libcamera/controls.h b/include/libcamera/controls.h
index 3b7f3347761e..a5c9bda28661 100644
--- a/include/libcamera/controls.h
+++ b/include/libcamera/controls.h
@@ -14,6 +14,7 @@ 
 #include <unordered_map>
 #include <vector>
 
+#include <libcamera/class.h>
 #include <libcamera/geometry.h>
 #include <libcamera/span.h>
 
@@ -220,8 +221,7 @@  public:
 	ControlType type() const { return type_; }
 
 private:
-	ControlId &operator=(const ControlId &) = delete;
-	ControlId(const ControlId &) = delete;
+	LIBCAMERA_DISABLE_COPY(ControlId);
 
 	unsigned int id_;
 	std::string name_;
@@ -260,8 +260,7 @@  public:
 	}
 
 private:
-	Control(const Control &) = delete;
-	Control &operator=(const Control &) = delete;
+	LIBCAMERA_DISABLE_COPY(Control);
 };
 
 class ControlInfo
diff --git a/include/libcamera/framebuffer_allocator.h b/include/libcamera/framebuffer_allocator.h
index a96aaeae58ce..9e42de280c98 100644
--- a/include/libcamera/framebuffer_allocator.h
+++ b/include/libcamera/framebuffer_allocator.h
@@ -11,6 +11,8 @@ 
 #include <memory>
 #include <vector>
 
+#include <libcamera/class.h>
+
 namespace libcamera {
 
 class Camera;
@@ -21,9 +23,6 @@  class FrameBufferAllocator
 {
 public:
 	FrameBufferAllocator(std::shared_ptr<Camera> camera);
-	FrameBufferAllocator(const FrameBufferAllocator &) = delete;
-	FrameBufferAllocator &operator=(const FrameBufferAllocator &) = delete;
-
 	~FrameBufferAllocator();
 
 	int allocate(Stream *stream);
@@ -33,6 +32,8 @@  public:
 	const std::vector<std::unique_ptr<FrameBuffer>> &buffers(Stream *stream) const;
 
 private:
+	LIBCAMERA_DISABLE_COPY(FrameBufferAllocator);
+
 	std::shared_ptr<Camera> camera_;
 	std::map<Stream *, std::vector<std::unique_ptr<FrameBuffer>>> buffers_;
 };
diff --git a/include/libcamera/internal/byte_stream_buffer.h b/include/libcamera/internal/byte_stream_buffer.h
index db59577dc332..ec8b0b2ada86 100644
--- a/include/libcamera/internal/byte_stream_buffer.h
+++ b/include/libcamera/internal/byte_stream_buffer.h
@@ -11,6 +11,7 @@ 
 #include <stdint.h>
 #include <type_traits>
 
+#include <libcamera/class.h>
 #include <libcamera/span.h>
 
 namespace libcamera {
@@ -65,8 +66,7 @@  public:
 	}
 
 private:
-	ByteStreamBuffer(const ByteStreamBuffer &other) = delete;
-	ByteStreamBuffer &operator=(const ByteStreamBuffer &other) = delete;
+	LIBCAMERA_DISABLE_COPY(ByteStreamBuffer);
 
 	void setOverflow();
 
diff --git a/include/libcamera/internal/camera_sensor.h b/include/libcamera/internal/camera_sensor.h
index c8f81882a958..9d26bd24a321 100644
--- a/include/libcamera/internal/camera_sensor.h
+++ b/include/libcamera/internal/camera_sensor.h
@@ -11,6 +11,7 @@ 
 #include <string>
 #include <vector>
 
+#include <libcamera/class.h>
 #include <libcamera/controls.h>
 #include <libcamera/geometry.h>
 
@@ -45,9 +46,6 @@  public:
 	explicit CameraSensor(const MediaEntity *entity);
 	~CameraSensor();
 
-	CameraSensor(const CameraSensor &) = delete;
-	CameraSensor &operator=(const CameraSensor &) = delete;
-
 	int init();
 
 	const std::string &model() const { return model_; }
@@ -74,6 +72,8 @@  protected:
 	std::string logPrefix() const override;
 
 private:
+	LIBCAMERA_DISABLE_COPY(CameraSensor);
+
 	int generateId();
 	int validateSensorDriver();
 	void initVimcDefaultProperties();
diff --git a/include/libcamera/internal/file.h b/include/libcamera/internal/file.h
index 9b6d011f5e9d..2f75aaf00dab 100644
--- a/include/libcamera/internal/file.h
+++ b/include/libcamera/internal/file.h
@@ -11,6 +11,7 @@ 
 #include <string>
 #include <sys/types.h>
 
+#include <libcamera/class.h>
 #include <libcamera/span.h>
 
 namespace libcamera {
@@ -34,9 +35,6 @@  public:
 	File();
 	~File();
 
-	File(const File &) = delete;
-	File &operator=(const File &) = delete;
-
 	const std::string &fileName() const { return name_; }
 	void setFileName(const std::string &name);
 	bool exists() const;
@@ -62,6 +60,8 @@  public:
 	static bool exists(const std::string &name);
 
 private:
+	LIBCAMERA_DISABLE_COPY(File);
+
 	void unmapAll();
 
 	std::string name_;
diff --git a/include/libcamera/internal/log.h b/include/libcamera/internal/log.h
index 4b10087a4718..5c44d623797a 100644
--- a/include/libcamera/internal/log.h
+++ b/include/libcamera/internal/log.h
@@ -10,6 +10,8 @@ 
 #include <chrono>
 #include <sstream>
 
+#include <libcamera/class.h>
+
 #include "libcamera/internal/utils.h"
 
 namespace libcamera {
@@ -57,7 +59,7 @@  public:
 		   LogSeverity severity);
 	LogMessage(const char *fileName, unsigned int line,
 		   const LogCategory &category, LogSeverity severity);
-	LogMessage(const LogMessage &) = delete;
+
 	LogMessage(LogMessage &&);
 	~LogMessage();
 
@@ -70,6 +72,8 @@  public:
 	const std::string msg() const { return msgStream_.str(); }
 
 private:
+	LIBCAMERA_DISABLE_COPY(LogMessage);
+
 	void init(const char *fileName, unsigned int line);
 
 	std::ostringstream msgStream_;
diff --git a/include/libcamera/internal/pipeline_handler.h b/include/libcamera/internal/pipeline_handler.h
index 0748f8634608..d5913eae88ca 100644
--- a/include/libcamera/internal/pipeline_handler.h
+++ b/include/libcamera/internal/pipeline_handler.h
@@ -15,6 +15,7 @@ 
 #include <sys/types.h>
 #include <vector>
 
+#include <libcamera/class.h>
 #include <libcamera/controls.h>
 #include <libcamera/object.h>
 #include <libcamera/stream.h>
@@ -49,8 +50,7 @@  public:
 	std::unique_ptr<IPAProxy> ipa_;
 
 private:
-	CameraData(const CameraData &) = delete;
-	CameraData &operator=(const CameraData &) = delete;
+	LIBCAMERA_DISABLE_COPY(CameraData);
 };
 
 class PipelineHandler : public std::enable_shared_from_this<PipelineHandler>,
diff --git a/include/libcamera/internal/v4l2_subdevice.h b/include/libcamera/internal/v4l2_subdevice.h
index eb25fa2fd01b..f983ae6302bb 100644
--- a/include/libcamera/internal/v4l2_subdevice.h
+++ b/include/libcamera/internal/v4l2_subdevice.h
@@ -11,6 +11,7 @@ 
 #include <string>
 #include <vector>
 
+#include <libcamera/class.h>
 #include <libcamera/geometry.h>
 
 #include "libcamera/internal/formats.h"
@@ -41,8 +42,6 @@  public:
 	};
 
 	explicit V4L2Subdevice(const MediaEntity *entity);
-	V4L2Subdevice(const V4L2Subdevice &) = delete;
-	V4L2Subdevice &operator=(const V4L2Subdevice &) = delete;
 	~V4L2Subdevice();
 
 	int open();
@@ -68,6 +67,8 @@  protected:
 	std::string logPrefix() const override;
 
 private:
+	LIBCAMERA_DISABLE_COPY(V4L2Subdevice);
+
 	std::vector<unsigned int> enumPadCodes(unsigned int pad);
 	std::vector<SizeRange> enumPadSizes(unsigned int pad,
 					    unsigned int code);
diff --git a/include/libcamera/internal/v4l2_videodevice.h b/include/libcamera/internal/v4l2_videodevice.h
index 626dfbcd6113..f8da608603ef 100644
--- a/include/libcamera/internal/v4l2_videodevice.h
+++ b/include/libcamera/internal/v4l2_videodevice.h
@@ -17,6 +17,7 @@ 
 #include <linux/videodev2.h>
 
 #include <libcamera/buffer.h>
+#include <libcamera/class.h>
 #include <libcamera/geometry.h>
 #include <libcamera/pixel_format.h>
 #include <libcamera/signal.h>
@@ -175,11 +176,8 @@  public:
 
 	explicit V4L2VideoDevice(const std::string &deviceNode);
 	explicit V4L2VideoDevice(const MediaEntity *entity);
-	V4L2VideoDevice(const V4L2VideoDevice &) = delete;
 	~V4L2VideoDevice();
 
-	V4L2VideoDevice &operator=(const V4L2VideoDevice &) = delete;
-
 	int open();
 	int open(int handle, enum v4l2_buf_type type);
 	void close();
@@ -219,6 +217,8 @@  protected:
 	std::string logPrefix() const override;
 
 private:
+	LIBCAMERA_DISABLE_COPY(V4L2VideoDevice);
+
 	int getFormatMeta(V4L2DeviceFormat *format);
 	int trySetFormatMeta(V4L2DeviceFormat *format, bool set);
 
diff --git a/include/libcamera/request.h b/include/libcamera/request.h
index 655b1324bae8..3354ae9083f1 100644
--- a/include/libcamera/request.h
+++ b/include/libcamera/request.h
@@ -12,6 +12,7 @@ 
 #include <stdint.h>
 #include <unordered_set>
 
+#include <libcamera/class.h>
 #include <libcamera/controls.h>
 #include <libcamera/signal.h>
 
@@ -39,8 +40,6 @@  public:
 	using BufferMap = std::map<const Stream *, FrameBuffer *>;
 
 	Request(Camera *camera, uint64_t cookie = 0);
-	Request(const Request &) = delete;
-	Request &operator=(const Request &) = delete;
 	~Request();
 
 	void reuse(ReuseFlag flags = Default);
@@ -57,6 +56,8 @@  public:
 	bool hasPendingBuffers() const { return !pending_.empty(); }
 
 private:
+	LIBCAMERA_DISABLE_COPY(Request);
+
 	friend class PipelineHandler;
 
 	void complete();