diff --git a/src/android/camera_device.h b/src/android/camera_device.h
index 86224aa1..863cf414 100644
--- a/src/android/camera_device.h
+++ b/src/android/camera_device.h
@@ -33,7 +33,7 @@
 #include "camera_worker.h"
 #include "jpeg/encoder.h"
 
-struct Camera3RequestDescriptor;
+class Camera3RequestDescriptor;
 struct CameraConfigData;
 
 class CameraDevice : protected libcamera::Loggable
diff --git a/src/android/camera_request.cpp b/src/android/camera_request.cpp
index 93e546bf..16a632b3 100644
--- a/src/android/camera_request.cpp
+++ b/src/android/camera_request.cpp
@@ -10,10 +10,10 @@
 using namespace libcamera;
 
 /*
- * \struct Camera3RequestDescriptor
+ * \class Camera3RequestDescriptor
  *
- * A utility structure that groups information about a capture request to be
- * later re-used at request complete time to notify the framework.
+ * A utility class that groups information about a capture request to be later
+ * reused at request complete time to notify the framework.
  */
 
 Camera3RequestDescriptor::Camera3RequestDescriptor(
@@ -43,3 +43,5 @@ Camera3RequestDescriptor::Camera3RequestDescriptor(
 	request_ = std::make_unique<CaptureRequest>(camera,
 						    reinterpret_cast<uint64_t>(this));
 }
+
+Camera3RequestDescriptor::~Camera3RequestDescriptor() = default;
diff --git a/src/android/camera_request.h b/src/android/camera_request.h
index 1346f6fa..79dfdb58 100644
--- a/src/android/camera_request.h
+++ b/src/android/camera_request.h
@@ -10,6 +10,8 @@
 #include <memory>
 #include <vector>
 
+#include <libcamera/base/class.h>
+
 #include <libcamera/camera.h>
 #include <libcamera/framebuffer.h>
 
@@ -18,18 +20,18 @@
 #include "camera_metadata.h"
 #include "camera_worker.h"
 
-struct Camera3RequestDescriptor {
+class Camera3RequestDescriptor
+{
+public:
 	enum class Status {
 		Pending,
 		Success,
 		Error,
 	};
 
-	Camera3RequestDescriptor() = default;
-	~Camera3RequestDescriptor() = default;
 	Camera3RequestDescriptor(libcamera::Camera *camera,
 				 const camera3_capture_request_t *camera3Request);
-	Camera3RequestDescriptor &operator=(Camera3RequestDescriptor &&) = default;
+	~Camera3RequestDescriptor();
 
 	bool isPending() const { return status_ == Status::Pending; }
 
@@ -41,6 +43,9 @@ struct Camera3RequestDescriptor {
 
 	camera3_capture_result_t captureResult_ = {};
 	Status status_ = Status::Pending;
+
+private:
+	LIBCAMERA_DISABLE_COPY(Camera3RequestDescriptor)
 };
 
 #endif /* __ANDROID_CAMERA_REQUEST_H__ */
