diff --git a/src/runtime/cpu/operators/CpuActivation.h b/src/runtime/cpu/operators/CpuActivation.h
index 0ae16bf..ded4a37 100644
--- a/src/runtime/cpu/operators/CpuActivation.h
+++ b/src/runtime/cpu/operators/CpuActivation.h
@@ -34,8 +34,6 @@
 class CpuActivation : public ICpuOperator
 {
 public:
-    /** Constructor */
-    CpuActivation() = default;
     /** Configure operator for a given list of arguments
      *
      * @param[in]  input           Source tensor info. Data types supported: QASYMM8/QASYMM8_SIGNED/QSYMM16/F16/F32.
@@ -43,11 +41,9 @@
      * @param[in]  activation_info Activation layer parameters.
      */
     void configure(const ITensorInfo *input, ITensorInfo *output, const ActivationLayerInfo &activation_info);
-    /** Static function to check if given info will lead to a valid configuration of @ref CpuActivation
+    /** Static function to check if given info will lead to a valid configuration
      *
-     * @param[in] input    Source tensor info. Data types supported: QASYMM8/QASYMM8_SIGNED/QSYMM16/F16/F32.
-     * @param[in] output   Destination tensor info. Data type supported: same as @p src
-     * @param[in] act_info Activation layer information.
+     * Similar to @ref CpuActivation::configure()
      *
      * @return a status
      */
diff --git a/src/runtime/cpu/operators/CpuAdd.h b/src/runtime/cpu/operators/CpuAdd.h
index 8ae7833..febb79e 100644
--- a/src/runtime/cpu/operators/CpuAdd.h
+++ b/src/runtime/cpu/operators/CpuAdd.h
@@ -34,8 +34,6 @@
 class CpuAdd : public ICpuOperator
 {
 public:
-    /** Constructor */
-    CpuAdd() = default;
     /** Initialise the kernel's input, dst and border mode.
      *
      * Valid configurations (src0,src1) -> dst :
@@ -60,13 +58,9 @@
      *
      */
     void configure(const ITensorInfo *src0, const ITensorInfo *src1, ITensorInfo *dst, ConvertPolicy policy, const ActivationLayerInfo &act_info = ActivationLayerInfo());
-    /** Static function to check if given info will lead to a valid configuration of @ref CpuAdd
+    /** Static function to check if given info will lead to a valid configuration
      *
-     * @param[in] src0     First input tensor info. Data types supported: U8/QASYMM8/QASYMM8_SIGNED/S16/QSYMM16/F16/S32/F32
-     * @param[in] src1     Second input tensor info. Data types supported: U8/QASYMM8/QASYMM8_SIGNED/S16/QSYMM16/F16/S32/F32
-     * @param[in] dst      The dst tensor info. Data types supported: U8/QASYMM8/QASYMM8_SIGNED/S16/QSYMM16/F16/S32/F32.
-     * @param[in] policy   Overflow policy.
-     * @param[in] act_info (Optional) Activation layer information in case of a fused activation. Currently not supported.
+     * Similar to @ref CpuAdd::configure()
      *
      * @return a status
      */
diff --git a/src/runtime/cpu/operators/CpuCast.h b/src/runtime/cpu/operators/CpuCast.h
index 2aea2d2..26f5740 100644
--- a/src/runtime/cpu/operators/CpuCast.h
+++ b/src/runtime/cpu/operators/CpuCast.h
@@ -34,8 +34,6 @@
 class CpuCast : public ICpuOperator
 {
 public:
-    /** Constructor */
-    CpuCast() = default;
     /** Configure operator for a given list of arguments
      *
      * Input data type must be different than output data type.
diff --git a/src/runtime/cpu/operators/CpuConcatenate.cpp b/src/runtime/cpu/operators/CpuConcatenate.cpp
index 23eb3fc..bb475b7 100644
--- a/src/runtime/cpu/operators/CpuConcatenate.cpp
+++ b/src/runtime/cpu/operators/CpuConcatenate.cpp
@@ -42,11 +42,6 @@
 {
 namespace cpu
 {
-CpuConcatenate::CpuConcatenate()
-    : _concat_kernels(), _num_srcs(0), _axis(0)
-{
-}
-
 void CpuConcatenate::configure(const std::vector<const ITensorInfo *> &srcs_vector, ITensorInfo *dst, size_t axis)
 {
     ARM_COMPUTE_ERROR_ON(dst == nullptr);
diff --git a/src/runtime/cpu/operators/CpuConcatenate.h b/src/runtime/cpu/operators/CpuConcatenate.h
index d2af3e2..55eab54 100644
--- a/src/runtime/cpu/operators/CpuConcatenate.h
+++ b/src/runtime/cpu/operators/CpuConcatenate.h
@@ -43,8 +43,7 @@
 class CpuConcatenate : public ICpuOperator
 {
 public:
-    /** Constructor */
-    CpuConcatenate();
+    CpuConcatenate() = default;
     /** Configure operator for a given list of arguments
      *
      * @note Input and output tensor dimensions preconditions defer depending on the concatenation axis.
@@ -56,15 +55,9 @@
      * @param[in]     axis        Concatenation axis. Supported underlying concatenation axis are 0, 1, 2 and 3.
      */
     void configure(const std::vector<const ITensorInfo *> &srcs_vector, ITensorInfo *dst, size_t axis);
-    /** Static function to check if given info will lead to a valid configuration of @ref NEConcatenateLayer
+    /** Static function to check if given info will lead to a valid configuration
      *
-     * @note Input and output tensor dimensions preconditions defer depending on the concatenation axis.
-     * @note Preconditions can be found respectively at @ref kernels::CpuConcatenateWidthKernel, @ref kernels::CpuConcatenateHeightKernel,
-     *       @ref kernels::CpuConcatenateDepthKernel and @ref kernels::CpuConcatenateBatchKernel.
-     *
-     * @param[in] srcs_vector The vectors containing all the tensors info to concatenate. Data types supported: QASYMM8/QASYMM8_SIGNED/F16/F32.
-     * @param[in] dst         Output tensor info. Data types supported: Same as @p srcs_vector.
-     * @param[in] axis        Concatenation axis. Supported underlying concatenation axis are 0, 1, 2 and 3.
+     * Similar to @ref CpuConcatenate::configure()
      *
      * @return a status
      */
@@ -74,9 +67,9 @@
     void run(ITensorPack &tensors) override;
 
 private:
-    std::vector<std::unique_ptr<ICpuKernel>> _concat_kernels;
-    unsigned int                             _num_srcs;
-    unsigned int                             _axis;
+    std::vector<std::unique_ptr<ICpuKernel>> _concat_kernels{};
+    unsigned int                             _num_srcs{ 0 };
+    unsigned int                             _axis{ 0 };
 };
 } // namespace cpu
 } // namespace arm_compute
diff --git a/src/runtime/cpu/operators/CpuConvertFullyConnectedWeights.h b/src/runtime/cpu/operators/CpuConvertFullyConnectedWeights.h
index 3f1ddf1..53ee17f 100644
--- a/src/runtime/cpu/operators/CpuConvertFullyConnectedWeights.h
+++ b/src/runtime/cpu/operators/CpuConvertFullyConnectedWeights.h
@@ -21,8 +21,8 @@
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
  */
-#ifndef ARM_COMPUTE_CPU_CONVERTFULLYCONNECTEDWEIGHTS_H
-#define ARM_COMPUTE_CPU_CONVERTFULLYCONNECTEDWEIGHTS_H
+#ifndef ARM_COMPUTE_CPU_CONVERT_FULLYCONNECTED_WEIGHTS_H
+#define ARM_COMPUTE_CPU_CONVERT_FULLYCONNECTED_WEIGHTS_H
 
 #include "src/runtime/cpu/ICpuOperator.h"
 
@@ -34,8 +34,6 @@
 class CpuConvertFullyConnectedWeights : public ICpuOperator
 {
 public:
-    /** Constructor */
-    CpuConvertFullyConnectedWeights() = default;
     /** Configure operator for a given list of arguments
      *
      * @param[in]  src                Source tensor to permute. Data types supported: All
@@ -44,12 +42,9 @@
      * @param[in]  data_layout        The data layout the weights have been trained in.
      */
     void configure(const ITensorInfo *src, ITensorInfo *dst, const TensorShape &original_src_shape, DataLayout data_layout);
-    /** Static function to check if given info will lead to a valid configuration of @ref CpuConvertFullyConnectedWeights
+    /** Static function to check if given info will lead to a valid configuration
      *
-     * @param[in] src                Source tensor to permute. Data types supported: All
-     * @param[in] dst                Destination tensor. Data types supported: Same as @p dst
-     * @param[in] original_src_shape Shape of the original src tensor (the one entering fully connected layer).
-     * @param[in] data_layout        The data layout the weights have been trained in.
+     * Similar to @ref CpuConvertFullyConnectedWeights::configure()
      *
      * @return a status
      */
@@ -59,4 +54,4 @@
 };
 } // namespace cpu
 } // namespace arm_compute
-#endif /* ARM_COMPUTE_CPU_CONVERTFULLYCONNECTEDWEIGHTS_H */
+#endif /* ARM_COMPUTE_CPU_CONVERT_FULLYCONNECTED_WEIGHTS_H */
diff --git a/src/runtime/cpu/operators/CpuCopy.h b/src/runtime/cpu/operators/CpuCopy.h
index 057bb6e..861bbb7 100644
--- a/src/runtime/cpu/operators/CpuCopy.h
+++ b/src/runtime/cpu/operators/CpuCopy.h
@@ -34,19 +34,15 @@
 class CpuCopy : public ICpuOperator
 {
 public:
-    /** Constructor */
-    CpuCopy() = default;
     /** Configure operator for a given list of arguments
      *
      * @param[in]  src Source tensor info. Data type supported: All
      * @param[out] dst Destination info. Data type supported: Same as @p src
      */
     void configure(const ITensorInfo *src, ITensorInfo *dst);
-
-    /** Static function to check if given info will lead to a valid configuration of @ref CpuCopy
+    /** Static function to check if given info will lead to a valid configuration
      *
-     * @param[in] src Source tensor info. Data type supported: All
-     * @param[in] dst Destination tensor info. Data type supported: Same as @p src
+     * Similar to @ref CpuCopy::configure()
      *
      * @return a status
      */
diff --git a/src/runtime/cpu/operators/CpuDepthwiseConv2d.cpp b/src/runtime/cpu/operators/CpuDepthwiseConv2d.cpp
index f577e94..8141487 100644
--- a/src/runtime/cpu/operators/CpuDepthwiseConv2d.cpp
+++ b/src/runtime/cpu/operators/CpuDepthwiseConv2d.cpp
@@ -71,12 +71,6 @@
 }
 } // namespace
 
-CpuDepthwiseConv2d::CpuDepthwiseConv2dOptimizedInternal::CpuDepthwiseConv2dOptimizedInternal()
-    : _dwc_optimized_func(nullptr), _permute_input(nullptr), _permute_weights(nullptr), _permute_output(nullptr), _activationlayer_function(nullptr), _has_bias(false), _is_quantized(false),
-      _is_nchw(true), _permute(false), _is_activationlayer_enabled(false), _is_prepared(false)
-{
-}
-
 void CpuDepthwiseConv2d::CpuDepthwiseConv2dOptimizedInternal::configure(ITensorInfo           *src,
                                                                         const ITensorInfo     *weights,
                                                                         const ITensorInfo     *biases,
@@ -264,12 +258,6 @@
     }
 }
 
-CpuDepthwiseConv2d::CpuDepthwiseConv2dGeneric::CpuDepthwiseConv2dGeneric()
-    : _depthwise_conv_kernel(nullptr), _permute_input(nullptr), _permute_weights(nullptr), _permute_output(nullptr), _activationlayer_function(nullptr), _is_nchw(true), _is_prepared(false),
-      _is_activationlayer_enabled(false)
-{
-}
-
 void CpuDepthwiseConv2d::CpuDepthwiseConv2dGeneric::configure(ITensorInfo *src, const ITensorInfo *weights, const ITensorInfo *biases, ITensorInfo *dst, const ConvolutionInfo &info)
 {
     ARM_COMPUTE_ERROR_ON_NULLPTR(src, weights, dst);
@@ -432,11 +420,6 @@
     }
 }
 
-CpuDepthwiseConv2d::CpuDepthwiseConv2d()
-    : _depth_conv_func(DepthwiseConvolutionFunction::GENERIC), _func_optimized(), _func_generic()
-{
-}
-
 void CpuDepthwiseConv2d::configure(ITensorInfo *src, const ITensorInfo *weights, const ITensorInfo *biases, ITensorInfo *dst, const ConvolutionInfo &info)
 {
     _depth_conv_func = get_depthwiseconvolution_function(src, weights, (biases != nullptr) ? biases : nullptr, dst, info);
diff --git a/src/runtime/cpu/operators/CpuDepthwiseConv2d.h b/src/runtime/cpu/operators/CpuDepthwiseConv2d.h
index ae9f894..dd4839b 100644
--- a/src/runtime/cpu/operators/CpuDepthwiseConv2d.h
+++ b/src/runtime/cpu/operators/CpuDepthwiseConv2d.h
@@ -21,8 +21,8 @@
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
  */
-#ifndef ARM_COMPUTE_CPU_DEPTHWISECONV2D_H
-#define ARM_COMPUTE_CPU_DEPTHWISECONV2D_H
+#ifndef ARM_COMPUTE_CPU_DEPTHWISE_CONV2D_H
+#define ARM_COMPUTE_CPU_DEPTHWISE_CONV2D_H
 
 #include "arm_compute/core/ITensorInfo.h"
 #include "arm_compute/core/experimental/Types.h"
@@ -45,7 +45,7 @@
 {
 public:
     /** Default constructor */
-    CpuDepthwiseConv2d();
+    CpuDepthwiseConv2d() = default;
     /** Initialize the function's source, destination, weights and convolution information.
      *
      * @param[in, out] src     Source tensor info. Data type supported: QASYMM8/QASYMM8_SIGNED/F16/F32
@@ -57,7 +57,6 @@
      * @param[in]      info    Depthwise convolution meta-data.
      */
     void configure(ITensorInfo *src, const ITensorInfo *weights, const ITensorInfo *biases, ITensorInfo *dst, const ConvolutionInfo &info);
-
     /** Static function to check if given info will lead to a valid configuration
      *
      * Similar to CpuDepthwiseConv2d::configure()
@@ -65,7 +64,6 @@
      * @return a status
      */
     static Status validate(const ITensorInfo *src, const ITensorInfo *weights, const ITensorInfo *biases, const ITensorInfo *dst, const ConvolutionInfo &info);
-
     /** Static function to choose the best depthwise convolution function for @ref CpuDepthwiseConv2d
      *
      * @param[in] src     Source tensor info. Data type supported: QASYMM8/QASYMM8_SIGNED/F16/F32
@@ -100,7 +98,7 @@
     {
     public:
         /** Default constructor */
-        CpuDepthwiseConv2dOptimizedInternal();
+        CpuDepthwiseConv2dOptimizedInternal() = default;
         /** Prevent instances of this class from being copied (As this class contains pointers) */
         CpuDepthwiseConv2dOptimizedInternal(const CpuDepthwiseConv2dOptimizedInternal &) = delete;
         /** Default move constructor */
@@ -121,7 +119,6 @@
          * @param[in]      info    Depthwise convolution meta-data.
          */
         void configure(ITensorInfo *src, const ITensorInfo *weights, const ITensorInfo *biases, ITensorInfo *dst, const ConvolutionInfo &info);
-
         /** Static function to check if given info will lead to a valid configuration
          *
          * Similar to CpuDepthwiseConv2dOptimizedInternal::configure()
@@ -157,7 +154,7 @@
     {
     public:
         /** Default constructor */
-        CpuDepthwiseConv2dGeneric();
+        CpuDepthwiseConv2dGeneric() = default;
         /** Prevent instances of this class from being copied (As this class contains pointers) */
         CpuDepthwiseConv2dGeneric(const CpuDepthwiseConv2dGeneric &) = delete;
         /** Default move constructor */
@@ -203,10 +200,10 @@
         bool                                                     _is_activationlayer_enabled{ false };
     };
 
-    DepthwiseConvolutionFunction        _depth_conv_func;
-    CpuDepthwiseConv2dOptimizedInternal _func_optimized;
-    CpuDepthwiseConv2dGeneric           _func_generic;
+    DepthwiseConvolutionFunction        _depth_conv_func{ DepthwiseConvolutionFunction::GENERIC };
+    CpuDepthwiseConv2dOptimizedInternal _func_optimized{};
+    CpuDepthwiseConv2dGeneric           _func_generic{};
 };
 } // namespace cpu
 } // namespace arm_compute
-#endif /* ARM_COMPUTE_CPU_DEPTHWISECONV2D_H */
+#endif /* ARM_COMPUTE_CPU_DEPTHWISE_CONV2D_H */
diff --git a/src/runtime/cpu/operators/CpuDepthwiseConv2dAssemblyDispatch.h b/src/runtime/cpu/operators/CpuDepthwiseConv2dAssemblyDispatch.h
index 7084516..f3d3b61 100644
--- a/src/runtime/cpu/operators/CpuDepthwiseConv2dAssemblyDispatch.h
+++ b/src/runtime/cpu/operators/CpuDepthwiseConv2dAssemblyDispatch.h
@@ -35,10 +35,8 @@
 class CpuDepthwiseConv2dAssemblyDispatch : public ICpuOperator
 {
 public:
-    /** Default constructor */
     CpuDepthwiseConv2dAssemblyDispatch();
     ARM_COMPUTE_DISALLOW_COPY_ALLOW_MOVE(CpuDepthwiseConv2dAssemblyDispatch);
-    /** Default destructor */
     ~CpuDepthwiseConv2dAssemblyDispatch();
     /** Initialize the function's source, destination, kernels and border_size.
      *
@@ -67,6 +65,7 @@
      * @return True if activation is supported else false
      */
     static bool is_activation_supported(const ActivationLayerInfo &activation);
+
     // Inherited methods overridden:
     void run(ITensorPack &tensors) override;
     void prepare(ITensorPack &tensors) override;
diff --git a/src/runtime/cpu/operators/CpuDequantize.h b/src/runtime/cpu/operators/CpuDequantize.h
index d1fb9e8..fdbd6a5 100644
--- a/src/runtime/cpu/operators/CpuDequantize.h
+++ b/src/runtime/cpu/operators/CpuDequantize.h
@@ -34,8 +34,6 @@
 class CpuDequantize : public ICpuOperator
 {
 public:
-    /** Default Constructor */
-    CpuDequantize() = default;
     /** Configure the kernel.
      *
      * @param[in]  src Source tensor info. Data types supported: QASYMM8/QASYMM8_SIGNED/QSYMM8_PER_CHANNEL/QSYMM8/QSYMM16.
diff --git a/src/runtime/cpu/operators/CpuDirectConv2d.h b/src/runtime/cpu/operators/CpuDirectConv2d.h
index 9e584b9..c17b076 100644
--- a/src/runtime/cpu/operators/CpuDirectConv2d.h
+++ b/src/runtime/cpu/operators/CpuDirectConv2d.h
@@ -55,9 +55,7 @@
 class CpuDirectConv2d : public ICpuOperator
 {
 public:
-    /** Constructor */
     CpuDirectConv2d(std::shared_ptr<IMemoryManager> memory_manager = nullptr);
-    /** Destructor */
     ~CpuDirectConv2d();
     /** Set the input, weights, biases and output tensors.
      *
diff --git a/src/runtime/cpu/operators/CpuElementwise.h b/src/runtime/cpu/operators/CpuElementwise.h
index 899a2ff..ef5caf2 100644
--- a/src/runtime/cpu/operators/CpuElementwise.h
+++ b/src/runtime/cpu/operators/CpuElementwise.h
@@ -52,13 +52,11 @@
      * @param[out] dst  The output tensor information.
      */
     void configure(const ITensorInfo *src0, const ITensorInfo *src1, ITensorInfo *dst);
-    /** Static function to check if the given information will lead to a valid configuration
+    /** Static function to check if given info will lead to a valid configuration
      *
-     * @param[in]  src0 The first source tensor information.
-     * @param[in]  src1 The second source tensor information. With PRelu, this is used as alpha tensor.
-     * @param[out] dst  The output tensor information.
+     * Similar to @ref CpuElementwiseArithmetic::configure()
      *
-     * @return A status
+     * @return a status
      */
     static Status validate(const ITensorInfo *src0, const ITensorInfo *src1, const ITensorInfo *dst);
 };
@@ -85,11 +83,9 @@
      * @param[out]     dst  Output tensor info. Data types supported: Same as @p src0.
      */
     void configure(const ITensorInfo *src0, const ITensorInfo *src1, ITensorInfo *dst);
-    /** Static function to check if given info will lead to a valid configuration of @ref cpu::kernels::CpuArithmeticKernel for division
+    /** Static function to check if given info will lead to a valid configuration
      *
-     * @param[in] src0 First tensor input info. Data types supported: S32/F16/F32.
-     * @param[in] src1 Second tensor input info. Data types supported: Same as @p src0.
-     * @param[in] dst  Output tensor info. Data types supported: Same as @p src0.
+     * Similar to @ref CpuElementwiseDivision::configure()
      *
      * @return a status
      */
@@ -112,11 +108,9 @@
      * @param[out]     dst  Output tensor info. Data types supported: Same as @p src0.
      */
     void configure(const ITensorInfo *src0, const ITensorInfo *src1, ITensorInfo *dst);
-    /** Static function to check if given info will lead to a valid configuration of @ref cpu::kernels::CpuArithmeticKernel for power
+    /** Static function to check if given info will lead to a valid configuration
      *
-     * @param[in] src0 First tensor input info. Data types supported: F16/F32.
-     * @param[in] src1 Second tensor input info. Data types supported: Same as @p src0.
-     * @param[in] dst  Output tensor info. Data types supported: Same as @p src0.
+     * Similar to @ref CpuElementwisePower::configure()
      *
      * @return a status
      */
@@ -139,12 +133,9 @@
      * @param[in]      op   Comparison Operation to be performed.
      */
     void configure(const ITensorInfo *src0, const ITensorInfo *src1, ITensorInfo *dst, ComparisonOperation op);
-    /** Static function to check if given info will lead to a valid configuration of @ref cpu::kernels::CpuComparisonKernel
+    /** Static function to check if given info will lead to a valid configuration
      *
-     * @param[in] src0 First tensor input info. Data types supported: QASYMM8/QASYMM8_SIGNED/S16/F16/S32/F32.
-     * @param[in] src1 Second tensor input info. Data types supported: Same as @p src0.
-     * @param[in] dst  Output tensor info. Data types supported: U16/U32.
-     * @param[in] op   Comparison Operation to be performed.
+     * Similar to @ref CpuElementwiseComparison::configure()
      *
      * @return a status
      */
@@ -167,11 +158,9 @@
      * @param[out]     dst  Output tensor info. Data types supported: U16/U32.
      */
     void configure(const ITensorInfo *src0, const ITensorInfo *src1, ITensorInfo *dst);
-    /** Static function to check if given info will lead to a valid configuration of @ref cpu::kernels::CpuComparisonKernel
+    /** Static function to check if given info will lead to a valid configuration
      *
-     * @param[in] src0 First tensor input info. Data types supported: QASYMM8/QASYMM8_SIGNED/S16/F16/S32/F32.
-     * @param[in] src1 Second tensor input info. Data types supported: Same as @p src0.
-     * @param[in] dst  Output tensor info. Data types supported: U16/U32.
+     * Similar to @ref CpuElementwiseComparisonStatic::configure()
      *
      * @return a status
      */
diff --git a/src/runtime/cpu/operators/CpuElementwiseUnary.h b/src/runtime/cpu/operators/CpuElementwiseUnary.h
index 721ba2a..5ea29e0 100644
--- a/src/runtime/cpu/operators/CpuElementwiseUnary.h
+++ b/src/runtime/cpu/operators/CpuElementwiseUnary.h
@@ -43,9 +43,7 @@
     void configure(ElementWiseUnary op, const ITensorInfo &src, ITensorInfo &dst);
     /** Static function to check if given info will lead to a valid configuration
      *
-     * @param[in] op  Unary operation to execute
-     * @param[in] src First tensor input info. Data types supported: F16/F32, F16/F32/S32 for NEG/ABS operations.
-     * @param[in] dst Output tensor info. Data types supported: Same as @p input.
+     * Similar to @ref CpuElementwiseUnary::configure()
      *
      * @return a status
      */
diff --git a/src/runtime/cpu/operators/CpuFill.h b/src/runtime/cpu/operators/CpuFill.h
index fac8e76..b946467 100644
--- a/src/runtime/cpu/operators/CpuFill.h
+++ b/src/runtime/cpu/operators/CpuFill.h
@@ -34,8 +34,6 @@
 class CpuFill : public ICpuOperator
 {
 public:
-    /** Constructor */
-    CpuFill() = default;
     /** Configure operator for a given list of arguments
      *
      * @param[in,out] tensor         Tensor to fill. Supported data types: All
diff --git a/src/runtime/cpu/operators/CpuFlatten.h b/src/runtime/cpu/operators/CpuFlatten.h
index ae71453..3e24a93 100644
--- a/src/runtime/cpu/operators/CpuFlatten.h
+++ b/src/runtime/cpu/operators/CpuFlatten.h
@@ -34,8 +34,6 @@
 class CpuFlatten : public ICpuOperator
 {
 public:
-    /** Constructor */
-    CpuFlatten() = default;
     /** Configure operator for a given list of arguments
      *
      * Valid data layouts:
diff --git a/src/runtime/cpu/operators/CpuFloor.h b/src/runtime/cpu/operators/CpuFloor.h
index cbb9d56..0cd0cc0 100644
--- a/src/runtime/cpu/operators/CpuFloor.h
+++ b/src/runtime/cpu/operators/CpuFloor.h
@@ -34,18 +34,15 @@
 class CpuFloor : public ICpuOperator
 {
 public:
-    /** Constructor */
-    CpuFloor() = default;
     /** Configure operator for a given list of arguments
      *
      * @param[in] src Source tensor info. Data types supported: F16/F32.
      * @param[in] dst Destination tensor info. Data type supported: same as @p src
      */
     void configure(const ITensorInfo *src, ITensorInfo *dst);
-    /** Static function to check if given info will lead to a valid configuration of @ref CpuFloor
+    /** Static function to check if given info will lead to a valid configuration
      *
-     * @param[in] src Source tensor info. Data types supported: F16/F32.
-     * @param[in] dst Destination tensor info. Data type supported: same as @p src
+     * Similar to @ref CpuFloor::configure()
      *
      * @return a status
      */
diff --git a/src/runtime/cpu/operators/CpuGemmDirectConv2d.h b/src/runtime/cpu/operators/CpuGemmDirectConv2d.h
index b572f36..7fb20b3 100644
--- a/src/runtime/cpu/operators/CpuGemmDirectConv2d.h
+++ b/src/runtime/cpu/operators/CpuGemmDirectConv2d.h
@@ -41,10 +41,8 @@
 class CpuGemmDirectConv2d : public ICpuOperator
 {
 public:
-    /** Constructor */
     CpuGemmDirectConv2d();
     ARM_COMPUTE_DISALLOW_COPY_ALLOW_MOVE(CpuGemmDirectConv2d);
-    /** Destructor */
     ~CpuGemmDirectConv2d();
     /** Set the input and output tensors.
      *
diff --git a/src/runtime/cpu/operators/CpuGemmLowpOutputStage.h b/src/runtime/cpu/operators/CpuGemmLowpOutputStage.h
index 848aaea..bed88a6 100644
--- a/src/runtime/cpu/operators/CpuGemmLowpOutputStage.h
+++ b/src/runtime/cpu/operators/CpuGemmLowpOutputStage.h
@@ -21,8 +21,8 @@
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
  */
-#ifndef ARM_COMPUTE_CPU_GEMMLOWP_OUTPUTSTAGE_H
-#define ARM_COMPUTE_CPU_GEMMLOWP_OUTPUTSTAGE_H
+#ifndef ARM_COMPUTE_CPU_GEMMLOWP_OUTPUT_STAGE_H
+#define ARM_COMPUTE_CPU_GEMMLOWP_OUTPUT_STAGE_H
 
 #include "arm_compute/core/Types.h"
 #include "src/runtime/cpu/ICpuOperator.h"
@@ -51,10 +51,6 @@
 class CpuGemmLowpOutputStage : public ICpuOperator
 {
 public:
-    /** Constructor */
-    CpuGemmLowpOutputStage() = default;
-    /** Default destructor */
-    ~CpuGemmLowpOutputStage() = default;
     /** Initialise the kernel's inputs, output
      *
      * Valid data layouts:
@@ -87,4 +83,4 @@
 };
 } // namespace cpu
 } // namespace arm_compute
-#endif /* ARM_COMPUTE_CPU_GEMMLOWP_OUTPUTSTAGE_H */
+#endif /* ARM_COMPUTE_CPU_GEMMLOWP_OUTPUT_STAGE_H */
diff --git a/src/runtime/cpu/operators/CpuMul.h b/src/runtime/cpu/operators/CpuMul.h
index 6e71718..da518c4 100644
--- a/src/runtime/cpu/operators/CpuMul.h
+++ b/src/runtime/cpu/operators/CpuMul.h
@@ -35,8 +35,6 @@
 class CpuMul : public ICpuOperator
 {
 public:
-    /** Default Constructor */
-    CpuMul() = default;
     /** Initialise the kernel's inputs, dst and convertion policy.
      *
      * @note For @p scale equal to 1/255 only round to nearest even (implemented as round half up) is supported.
@@ -81,8 +79,6 @@
 class CpuComplexMul : public ICpuOperator
 {
 public:
-    /** Default Constructor */
-    CpuComplexMul() = default;
     /** Initialise the kernel's inputs, dst.
      *
      * @param[in, out] src1     First input tensor. Data types supported: F32. Number of channels supported: 2 (complex tensor).
diff --git a/src/runtime/cpu/operators/CpuPermute.h b/src/runtime/cpu/operators/CpuPermute.h
index 2b30d7f..2500017 100644
--- a/src/runtime/cpu/operators/CpuPermute.h
+++ b/src/runtime/cpu/operators/CpuPermute.h
@@ -34,8 +34,6 @@
 class CpuPermute : public ICpuOperator
 {
 public:
-    /** Constructor */
-    CpuPermute() = default;
     /** Configure operator for a given list of arguments
      *
      * @note Arbitrary permutation vectors are supported with rank not greater than 4
@@ -45,13 +43,9 @@
      * @param[in]  perm Permutation vector
      */
     void configure(const ITensorInfo *src, ITensorInfo *dst, const PermutationVector &perm);
-    /** Static function to check if given info will lead to a valid configuration of @ref CpuPermute
+    /** Static function to check if given info will lead to a valid configuration
      *
-     * @note Arbitrary permutation vectors are supported with rank not greater than 4
-     *
-     * @param[in] src  Source tensor to permute. Data types supported: All
-     * @param[in] dst  Destination tensor. Data types supported: Same as @p dst
-     * @param[in] perm Permutation vector
+     * Similar to @ref CpuPermute::configure()
      *
      * @return a status
      */
diff --git a/src/runtime/cpu/operators/CpuPool2d.h b/src/runtime/cpu/operators/CpuPool2d.h
index 68416b5..7feff91 100644
--- a/src/runtime/cpu/operators/CpuPool2d.h
+++ b/src/runtime/cpu/operators/CpuPool2d.h
@@ -46,10 +46,8 @@
 class CpuPool2d : public ICpuOperator
 {
 public:
-    /** Constructor */
     CpuPool2d();
     ARM_COMPUTE_DISALLOW_COPY_ALLOW_MOVE(CpuPool2d);
-    /** Default destructor */
     ~CpuPool2d();
     /** Set the src and dst tensors.
      *
diff --git a/src/runtime/cpu/operators/CpuQuantize.h b/src/runtime/cpu/operators/CpuQuantize.h
index 09afffd..9a34a36 100644
--- a/src/runtime/cpu/operators/CpuQuantize.h
+++ b/src/runtime/cpu/operators/CpuQuantize.h
@@ -34,8 +34,6 @@
 class CpuQuantize : public ICpuOperator
 {
 public:
-    /** Default Constructor */
-    CpuQuantize() = default;
     /** Set the input and output tensors.
      *
      * @param[in]  src Source tensor info. The dimensions over the third will be interpreted as batches. Data types supported: QASYMM8/QASYMM8_SIGNED/F32/F16.
diff --git a/src/runtime/cpu/operators/CpuReshape.h b/src/runtime/cpu/operators/CpuReshape.h
index e136043..581b55e 100644
--- a/src/runtime/cpu/operators/CpuReshape.h
+++ b/src/runtime/cpu/operators/CpuReshape.h
@@ -34,19 +34,15 @@
 class CpuReshape : public ICpuOperator
 {
 public:
-    /** Constructor */
-    CpuReshape() = default;
     /** Configure operator for a given list of arguments
      *
      * @param[in]  src Source tensor info. Data type supported: All
      * @param[out] dst Destination info. Data type supported: Same as @p src
      */
     void configure(const ITensorInfo *src, ITensorInfo *dst);
-
-    /** Static function to check if given info will lead to a valid configuration of @ref CpuReshape
+    /** Static function to check if given info will lead to a valid configuration
      *
-     * @param[in] src Source tensor info. Data type supported: All
-     * @param[in] dst Destination tensor info. Data type supported: Same as @p src
+     * Similar to @ref CpuReshape::configure()
      *
      * @return a status
      */
diff --git a/src/runtime/cpu/operators/CpuScale.cpp b/src/runtime/cpu/operators/CpuScale.cpp
index 681a15e..475cb2d 100644
--- a/src/runtime/cpu/operators/CpuScale.cpp
+++ b/src/runtime/cpu/operators/CpuScale.cpp
@@ -86,22 +86,18 @@
 }
 } // namespace
 
-CpuScale::CpuScale()
-    : _scale_info(InterpolationPolicy::NEAREST_NEIGHBOR, BorderMode::UNDEFINED), _data_layout(DataLayout::UNKNOWN), _is_prepared(false)
-{
-}
-
 void CpuScale::configure(ITensorInfo *src, ITensorInfo *dst, const ScaleKernelInfo &info)
 {
     ARM_COMPUTE_ERROR_ON_NULLPTR(src, dst);
     ARM_COMPUTE_ERROR_THROW_ON(CpuScale::validate(src, dst, info));
 
-    _scale_info = info;
+    _scale_info  = info;
+    _is_prepared = false;
 
     // Get data layout and width/height indices
-    _data_layout = _scale_info.data_layout == DataLayout::UNKNOWN ? src->data_layout() : _scale_info.data_layout;
-    const int        idx_width   = get_data_layout_dimension_index(_data_layout, DataLayoutDimension::WIDTH);
-    const int        idx_height  = get_data_layout_dimension_index(_data_layout, DataLayoutDimension::HEIGHT);
+    _data_layout         = _scale_info.data_layout == DataLayout::UNKNOWN ? src->data_layout() : _scale_info.data_layout;
+    const int idx_width  = get_data_layout_dimension_index(_data_layout, DataLayoutDimension::WIDTH);
+    const int idx_height = get_data_layout_dimension_index(_data_layout, DataLayoutDimension::HEIGHT);
 
     // Compute the ratio between source width/height and destination width/height
     const bool is_align_corners_used = _scale_info.align_corners && arm_compute::scale_utils::is_align_corners_allowed_sampling_policy(_scale_info.sampling_policy);
@@ -205,8 +201,8 @@
         auto       offsets = tensors.get_tensor(TensorType::ACL_INT_2);
 
         // Get data layout and width/height indices
-        const int        idx_width   = get_data_layout_dimension_index(_data_layout, DataLayoutDimension::WIDTH);
-        const int        idx_height  = get_data_layout_dimension_index(_data_layout, DataLayoutDimension::HEIGHT);
+        const int idx_width  = get_data_layout_dimension_index(_data_layout, DataLayoutDimension::WIDTH);
+        const int idx_height = get_data_layout_dimension_index(_data_layout, DataLayoutDimension::HEIGHT);
 
         // Compute the ratio between source width/height and destination width/height
         const bool is_align_corners_used = _scale_info.align_corners && arm_compute::scale_utils::is_align_corners_allowed_sampling_policy(_scale_info.sampling_policy);
diff --git a/src/runtime/cpu/operators/CpuScale.h b/src/runtime/cpu/operators/CpuScale.h
index 90248a8..b83e04b 100644
--- a/src/runtime/cpu/operators/CpuScale.h
+++ b/src/runtime/cpu/operators/CpuScale.h
@@ -40,8 +40,6 @@
 class CpuScale : public ICpuOperator
 {
 public:
-    /** Default Constructor */
-    CpuScale();
     /** Initialize the function's source, destination, interpolation type and border_mode.
      *
      * @param[in, out] src  Source tensor info. Data type supported: QASYMM8/QASYMM8_SIGNED/U8/S16/F16/F32. (Written to only for @p border_mode != UNDEFINED)
@@ -49,11 +47,9 @@
      * @param[in]      info @ref ScaleKernelInfo to be used for configuration
      */
     void configure(ITensorInfo *src, ITensorInfo *dst, const ScaleKernelInfo &info);
-    /** Static function to check if given info will lead to a valid configuration of @ref NEScale
+    /** Static function to check if given info will lead to a valid configuration
      *
-     * @param[in] src  Source tensor info. Data type supported: QASYMM8/QASYMM8_SIGNED/U8/S16/F16/F32. (Written to only for @p border_mode != UNDEFINED)
-     * @param[in] dst  Destination tensor info. Data type supported: Same as @p src. All but the lowest two dimensions must be the same size as in the input tensor, i.e. scaling is only performed within the XY-plane.
-     * @param[in] info @ref ScaleKernelInfo to be used for validation
+     * Similar to @ref CpuScale::configure()
      *
      * @return a status
      */
@@ -64,10 +60,10 @@
     void run(ITensorPack &tensors) override;
 
 private:
-    ScaleKernelInfo _scale_info;
-    DataLayout      _data_layout;
-    bool            _is_prepared;
+    ScaleKernelInfo _scale_info{ InterpolationPolicy::NEAREST_NEIGHBOR, BorderMode::UNDEFINED };
+    DataLayout      _data_layout{ DataLayout::UNKNOWN };
+    bool            _is_prepared{ false };
 };
 } // namespace cpu
 } // namespace arm_compute
-#endif /*ARM_COMPUTE_CPU_SCALE_H */
+#endif /* ARM_COMPUTE_CPU_SCALE_H */
diff --git a/src/runtime/cpu/operators/CpuSoftmax.h b/src/runtime/cpu/operators/CpuSoftmax.h
index 3881797..a9ac803 100644
--- a/src/runtime/cpu/operators/CpuSoftmax.h
+++ b/src/runtime/cpu/operators/CpuSoftmax.h
@@ -57,7 +57,6 @@
 class CpuSoftmaxGeneric : public ICpuOperator
 {
 public:
-    /** Constructor */
     CpuSoftmaxGeneric();
     /** Set the input and output tensors.
      *
@@ -69,14 +68,9 @@
      *                       axis=1, softmax will be applied to 4x6=24 vectors of size 5. Defaults to 0
      */
     void configure(const ITensorInfo *src, ITensorInfo *dst, float beta = 1.0f, int32_t axis = 0);
-
-    /** Static function to check if given info will lead to a valid configuration of @ref CpuSoftmax
+    /** Static function to check if given info will lead to a valid configuration
      *
-     * @param[in] src  Source tensor info. Data types supported: QASYMM8/QASYMM8_SIGNED/F16/F32.
-     * @param[in] dst  Destination tensor info. Data types supported: same as @p input
-     * @param[in] beta (Optional) A scaling factor for the exponent.
-     * @param[in] axis (Optional) The dimension in which to apply the function. E.g. for input of shape 4x5x6 and
-     *                       axis=1, softmax will be applied to 4x6=24 vectors of size 5. Defaults to 0
+     * Similar to @ref CpuSoftmaxGeneric::configure()
      *
      * @return a status
      */
diff --git a/src/runtime/cpu/operators/CpuSub.h b/src/runtime/cpu/operators/CpuSub.h
index 099ffef..aad01fe 100644
--- a/src/runtime/cpu/operators/CpuSub.h
+++ b/src/runtime/cpu/operators/CpuSub.h
@@ -56,26 +56,9 @@
      * @param[in]  act_info (Optional) Activation layer information in case of a fused activation. Currently not supported.
      */
     void configure(const ITensorInfo *src0, const ITensorInfo *src1, ITensorInfo *dst, ConvertPolicy policy, const ActivationLayerInfo &act_info = ActivationLayerInfo());
-    /** Static function to check if given info will lead to a valid configuration of @ref CpuSub
+    /** Static function to check if given info will lead to a valid configuration
      *
-     * Valid configurations (src0,src1) -> dst :
-     *
-     *   - (U8,U8)                          -> U8
-     *   - (U8,U8)                          -> S16
-     *   - (QASYMM8, QASYMM8)               -> QASYMM8
-     *   - (QASYMM8_SIGNED, QASYMM8_SIGNED) -> QASYMM8_SIGNED
-     *   - (S16,U8)                         -> S16
-     *   - (U8,S16)                         -> S16
-     *   - (S16,S16)                        -> S16
-     *   - (S32,S32)                        -> S32
-     *   - (F16,F16)                        -> F16
-     *   - (F32,F32)                        -> F32
-     *
-     * @param[in] src0     First tensor input. Data types supported: U8/QASYMM8/QASYMM8_SIGNED/S16/S32/F16/F32
-     * @param[in] src1     Second tensor input. Data types supported: U8/QASYMM8/QASYMM8_SIGNED/S16/S32/F16/F32
-     * @param[in] dst      Output tensor. Data types supported: U8/QASYMM8/QASYMM8_SIGNED/S16/S32/F16/F32
-     * @param[in] policy   Policy to use to handle overflow. Convert policy cannot be WRAP if datatype is quantized.
-     * @param[in] act_info (Optional) Activation layer information in case of a fused activation. Currently not supported.
+     * Similar to @ref CpuSub::configure()
      *
      * @return a status
      */
diff --git a/src/runtime/cpu/operators/CpuTranspose.h b/src/runtime/cpu/operators/CpuTranspose.h
index c0232dd..0735924 100644
--- a/src/runtime/cpu/operators/CpuTranspose.h
+++ b/src/runtime/cpu/operators/CpuTranspose.h
@@ -34,18 +34,15 @@
 class CpuTranspose : public ICpuOperator
 {
 public:
-    /** Constructor */
-    CpuTranspose() = default;
     /** Configure operator for a given list of arguments
      *
      * @param[in]  src Source tensor to permute. Data types supported: All
      * @param[out] dst Destintation tensor. Data types supported: Same as @p src
      */
     void configure(const ITensorInfo *src, ITensorInfo *dst);
-    /** Static function to check if given info will lead to a valid configuration of @ref CpuTranspose
+    /** Static function to check if given info will lead to a valid configuration
      *
-     * @param[in] src Source tensor to permute. Data types supported: All
-     * @param[in] dst Destination tensor. Data types supported: Same as @p dst
+     * Similar to @ref CpuTranspose::configure()
      *
      * @return a status
      */
diff --git a/src/runtime/gpu/cl/operators/ClActivation.h b/src/runtime/gpu/cl/operators/ClActivation.h
index 235b826..82ef8ac 100644
--- a/src/runtime/gpu/cl/operators/ClActivation.h
+++ b/src/runtime/gpu/cl/operators/ClActivation.h
@@ -35,8 +35,6 @@
 class ClActivation : public IClOperator
 {
 public:
-    /** Constructor */
-    ClActivation() = default;
     /** Configure operator for a given list of arguments
      *
      * @param[in]  compile_context The compile context to be used.
@@ -45,11 +43,9 @@
      * @param[in]  activation_info Activation layer parameters.
      */
     void configure(const ClCompileContext &compile_context, ITensorInfo *src, ITensorInfo *dst, const ActivationLayerInfo &activation_info);
-    /** Static function to check if given info will lead to a valid configuration of @ref ClActivation
+    /** Static function to check if given info will lead to a valid configuration
      *
-     * @param[in] src      Source tensor info. Data types supported: QASYMM8/QASYMM8_SIGNED/QSYMM16/F16/F32.
-     * @param[in] dst      Destination tensor info. Data type supported: same as @p src
-     * @param[in] act_info Activation layer information.
+     * Similar to @ref ClActivation::configure()
      *
      * @return a status
      */
diff --git a/src/runtime/gpu/cl/operators/ClAdd.h b/src/runtime/gpu/cl/operators/ClAdd.h
index f751d8d..7b84a76 100644
--- a/src/runtime/gpu/cl/operators/ClAdd.h
+++ b/src/runtime/gpu/cl/operators/ClAdd.h
@@ -39,8 +39,6 @@
 class ClAdd : public IClOperator
 {
 public:
-    /** Default Constructor */
-    ClAdd() = default;
     /** Configure function for a given list of arguments.
      *
      * Valid configurations (src1,src2) -> dst :
@@ -68,27 +66,9 @@
      */
     void configure(const ClCompileContext &compile_context, ITensorInfo *src1, ITensorInfo *src2, ITensorInfo *dst, ConvertPolicy policy,
                    const ActivationLayerInfo &act_info = ActivationLayerInfo());
-    /** Static function to check if given info will lead to a valid configuration of @ref ClAdd
+    /** Static function to check if given info will lead to a valid configuration
      *
-     * Valid configurations (src1,src2) -> dst :
-     *
-     *   - (U8,U8)           -> U8
-     *   - (U8,U8)           -> S16
-     *   - (S16,U8)          -> S16
-     *   - (U8,S16)          -> S16
-     *   - (S16,S16)         -> S16
-     *   - (S32,S32)         -> S32
-     *   - (F16,F16)         -> F16
-     *   - (F32,F32)         -> F32
-     *   - (QASYMM8,QASYMM8) -> QASYMM8
-     *   - (QASYMM8_SIGNED,QASYMM8_SIGNED) -> QASYMM8_SIGNED
-     *   - (QSYMM16,QSYMM16) -> QSYMM16
-     *
-     * @param[in] src1     First source tensor info. Data types supported: U8/QASYMM8/QASYMM8_SIGNED/S16/QSYMM16/S32/F16/F32.
-     * @param[in] src2     Second source tensor info. Data types supported: U8/QASYMM8/QASYMM8_SIGNED/S16/QSYMM16/S32/F16/F32.
-     * @param[in] dst      Destination tensor info. Data types supported: U8/QASYMM8/QASYMM8_SIGNED/S16/QSYMM16/S32/F16/F32.
-     * @param[in] policy   Policy to use to handle overflow.
-     * @param[in] act_info (Optional) Activation layer information in case of a fused activation.
+     * Similar to @ref ClAdd::configure()
      *
      * @return a status
      */
diff --git a/src/runtime/gpu/cl/operators/ClCast.h b/src/runtime/gpu/cl/operators/ClCast.h
index 69e028d..107eb2b 100644
--- a/src/runtime/gpu/cl/operators/ClCast.h
+++ b/src/runtime/gpu/cl/operators/ClCast.h
@@ -35,8 +35,6 @@
 class ClCast : public IClOperator
 {
 public:
-    /** Constructor */
-    ClCast() = default;
     /** Configure operator for a given list of arguments
      *
      * @note Input data type must be different than output data type.
diff --git a/src/runtime/gpu/cl/operators/ClConcatenate.cpp b/src/runtime/gpu/cl/operators/ClConcatenate.cpp
index 4385fcf..d3c05ea 100644
--- a/src/runtime/gpu/cl/operators/ClConcatenate.cpp
+++ b/src/runtime/gpu/cl/operators/ClConcatenate.cpp
@@ -42,13 +42,6 @@
 {
 namespace opencl
 {
-ClConcatenate::ClConcatenate()
-    : _concat_kernels(),
-      _num_inputs(0),
-      _axis(Window::DimX)
-{
-}
-
 void ClConcatenate::configure(const CLCompileContext &compile_context, const std::vector<ITensorInfo *> &src_vector, ITensorInfo *dst, size_t axis)
 {
     ARM_COMPUTE_ERROR_ON(dst == nullptr);
diff --git a/src/runtime/gpu/cl/operators/ClConcatenate.h b/src/runtime/gpu/cl/operators/ClConcatenate.h
index 0d960a6..fb1235b 100644
--- a/src/runtime/gpu/cl/operators/ClConcatenate.h
+++ b/src/runtime/gpu/cl/operators/ClConcatenate.h
@@ -44,8 +44,7 @@
 class ClConcatenate : public IClOperator
 {
 public:
-    /** Default constructor */
-    ClConcatenate();
+    ClConcatenate() = default;
     /** Initialise the kernel's inputs vector and dst.
      *
      * @note Input and dst tensor dimensions preconditions defer depending on the concatenation axis.
@@ -59,15 +58,9 @@
      * @param[in]     axis            Concatenation axis. Supported underlying concatenation axis are 0, 1, 2 and 3.
      */
     void configure(const ClCompileContext &compile_context, const std::vector<ITensorInfo *> &src_vector, ITensorInfo *dst, size_t axis);
-    /** Static function to check if given info will lead to a valid configuration of @ref ClConcatenate
+    /** Static function to check if given info will lead to a valid configuration
      *
-     * @note Input and dst tensor dimensions preconditions defer depending on the concatenation axis.
-     * @note Preconditions can be found respectively at @ref kernels::ClWidthConcatenateKernel,
-     *       @ref kernels::ClHeightConcatenateKernel and @ref kernels::ClDepthConcatenateKernel.
-     *
-     * @param[in] src_vector The vectors containing all the tensors info to concatenate. Data types supported: All
-     * @param[in] dst        Destination tensor info. Data types supported: same as @p src_vector.
-     * @param[in] axis       Concatenation axis. Supported underlying concatenation axis are 0, 1, 2 and 3.
+     * Similar to @ref ClConcatenate::configure()
      *
      * @return a status
      */
@@ -77,9 +70,9 @@
     void run(ITensorPack &tensors) override;
 
 private:
-    std::vector<std::unique_ptr<IClKernel>> _concat_kernels;
-    unsigned int                            _num_inputs;
-    unsigned int                            _axis;
+    std::vector<std::unique_ptr<IClKernel>> _concat_kernels{};
+    unsigned int                            _num_inputs{ 0 };
+    unsigned int                            _axis{ 0 };
 };
 } // namespace opencl
 } // namespace arm_comPUTE
diff --git a/src/runtime/gpu/cl/operators/ClConvertFullyConnectedWeights.h b/src/runtime/gpu/cl/operators/ClConvertFullyConnectedWeights.h
index efedc2f..7ea35c5 100644
--- a/src/runtime/gpu/cl/operators/ClConvertFullyConnectedWeights.h
+++ b/src/runtime/gpu/cl/operators/ClConvertFullyConnectedWeights.h
@@ -21,8 +21,8 @@
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
  */
-#ifndef ARM_COMPUTE_CL_CONVERTFULLYCONNECTEDWEIGHTS_H
-#define ARM_COMPUTE_CL_CONVERTFULLYCONNECTEDWEIGHTS_H
+#ifndef ARM_COMPUTE_CL_CONVERT_FULLYCONNECTED_WEIGHTS_H
+#define ARM_COMPUTE_CL_CONVERT_FULLYCONNECTED_WEIGHTS_H
 
 #include "src/core/gpu/cl/ClCompileContext.h"
 #include "src/runtime/gpu/cl/IClOperator.h"
@@ -35,8 +35,6 @@
 class ClConvertFullyConnectedWeights : public IClOperator
 {
 public:
-    /** Constructor */
-    ClConvertFullyConnectedWeights() = default;
     /** Initialise the kernel's inputs and outputs
      *
      * @param[in] compile_context    The compile context to be used.
@@ -46,12 +44,9 @@
      * @param[in] data_layout        The data layout the weights have been trained in.
      */
     void configure(const CLCompileContext &compile_context, const ITensorInfo *src, ITensorInfo *dst, const TensorShape &original_src_shape, DataLayout data_layout);
-    /**  Static function to check if given info will lead to a valid configuration of @ref kernels::ClConvertFullyConnectedWeightsKernel.
+    /** Static function to check if given info will lead to a valid configuration
      *
-     * @param[in] src                First tensor src info. Data types supported: All.
-     * @param[in] dst                Output tensor info. Data types supported: same as @p src.
-     * @param[in] original_src_shape Shape of the original src tensor (the one entering fully connected layer).
-     * @param[in] data_layout        The data layout the weights have been trained in.
+     * Similar to @ref ClConvertFullyConnectedWeights::configure()
      *
      * @return a status
      */
@@ -59,4 +54,4 @@
 };
 } // namespace opencl
 } // namespace arm_compute
-#endif /* ARM_COMPUTE_CL_CONVERTFULLYCONNECTEDWEIGHTS_H */
+#endif /* ARM_COMPUTE_CL_CONVERT_FULLYCONNECTED_WEIGHTS_H */
diff --git a/src/runtime/gpu/cl/operators/ClCopy.h b/src/runtime/gpu/cl/operators/ClCopy.h
index 0b99676..e8ea812 100644
--- a/src/runtime/gpu/cl/operators/ClCopy.h
+++ b/src/runtime/gpu/cl/operators/ClCopy.h
@@ -36,8 +36,6 @@
 class ClCopy : public IClOperator
 {
 public:
-    /** Constructor */
-    ClCopy() = default;
     /** Initialise the function's source and destination.
      *
      * @param[in]  compile_context The compile context to be used.
@@ -47,11 +45,9 @@
      *
      */
     void configure(const CLCompileContext &compile_context, ITensorInfo *src, ITensorInfo *dst, Window *dst_window = nullptr);
-    /** Static function to check if given info will lead to a valid configuration of @ref kernels::ClCopyKernel
+    /** Static function to check if given info will lead to a valid configuration
      *
-     * @param[in] src        Source tensor info. Data types supported: All.
-     * @param[in] dst        Output tensor info. Data types supported: Same as @p src.
-     * @param[in] dst_window (Optional) Window to be used in case only copying into part of a tensor. Default is nullptr.
+     * Similar to @ref ClCopy::configure()
      *
      * @return a status
      */
diff --git a/src/runtime/gpu/cl/operators/ClCrop.h b/src/runtime/gpu/cl/operators/ClCrop.h
index acfbf14..cca69d6 100644
--- a/src/runtime/gpu/cl/operators/ClCrop.h
+++ b/src/runtime/gpu/cl/operators/ClCrop.h
@@ -21,8 +21,8 @@
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
  */
-#ifndef ARM_COMPUTE_CL_COPY_H
-#define ARM_COMPUTE_CL_COPY_H
+#ifndef ARM_COMPUTE_CL_CROP_H
+#define ARM_COMPUTE_CL_CROP_H
 
 #include "arm_compute/core/Window.h"
 #include "src/core/gpu/cl/ClCompileContext.h"
@@ -36,8 +36,6 @@
 class ClCrop : public IClOperator
 {
 public:
-    /** Constructor */
-    ClCrop() = default;
     /** Initialise the function's source and destination.
      *
      * @note Supported tensor rank: up to 4
@@ -53,22 +51,15 @@
      */
     void configure(const CLCompileContext &compile_context, const ITensorInfo *src, ITensorInfo *dst, Coordinates2D start, Coordinates2D end, uint32_t batch_index, float extrapolation_value = 0,
                    Window *dst_window = nullptr);
-
-    /** Static function to check if given info will lead to a valid configuration of @ref kernels::ClCropKernel
+    /** Static function to check if given info will lead to a valid configuration
      *
-     * @note Supported tensor rank: up to 4
+     * Similar to @ref ClCrop::configure()
      *
-     * @param[in] src                 Source tensor info. Data type supported: All. Data layouts supported: NHWC.
-     * @param[in] dst                 Destination tensor info. Data type supported: F32
-     * @param[in] start               Coordinates of where to start cropping the image.
-     * @param[in] end                 Coordinates of where to end cropping the image.
-     * @param[in] batch_index         Fourth dimension index of the 3D image to crop in @p src.
-     * @param[in] extrapolation_value Value to be used for values outside of the image. Default is 0.
-     * @param[in] dst_window          Output window to be used in case cropped image is being copied into a tensor. Default is nullptr.
+     * @return a status
      */
     static Status validate(const ITensorInfo *src, const ITensorInfo *dst, Coordinates2D start, Coordinates2D end, uint32_t batch_index, float extrapolation_value = 0,
                            Window *dst_window = nullptr);
 };
 } // namespace opencl
 } // namespace arm_compute
-#endif /* ARM_COMPUTE_CL_COPY_H */
+#endif /* ARM_COMPUTE_CL_CROP_H */
diff --git a/src/runtime/gpu/cl/operators/ClDequantize.h b/src/runtime/gpu/cl/operators/ClDequantize.h
index 47fad3e..5bcdcb2 100644
--- a/src/runtime/gpu/cl/operators/ClDequantize.h
+++ b/src/runtime/gpu/cl/operators/ClDequantize.h
@@ -35,8 +35,6 @@
 class ClDequantize : public IClOperator
 {
 public:
-    /** Constructor */
-    ClDequantize() = default;
     /** Set the input and output tensors.
      *
      * @param[in]  compile_context The compile context to be used.
diff --git a/src/runtime/gpu/cl/operators/ClDirectConv2d.h b/src/runtime/gpu/cl/operators/ClDirectConv2d.h
index e069733..a2785b5 100644
--- a/src/runtime/gpu/cl/operators/ClDirectConv2d.h
+++ b/src/runtime/gpu/cl/operators/ClDirectConv2d.h
@@ -42,7 +42,6 @@
 class ClDirectConv2d : public IClOperator
 {
 public:
-    /** Constructor */
     ClDirectConv2d() = default;
     /** Set the src and dst tensors.
      *
diff --git a/src/runtime/gpu/cl/operators/ClElementwiseOperations.h b/src/runtime/gpu/cl/operators/ClElementwiseOperations.h
index b9ab140..c01b107 100644
--- a/src/runtime/gpu/cl/operators/ClElementwiseOperations.h
+++ b/src/runtime/gpu/cl/operators/ClElementwiseOperations.h
@@ -39,8 +39,6 @@
 class ClElementwiseDivision : public IClOperator
 {
 public:
-    /** Default Constructor */
-    ClElementwiseDivision() = default;
     /** Configure function for a given list of arguments.
      *
      * @param[in]  compile_context The compile context to be used.
@@ -50,12 +48,9 @@
      * @param[in]  act_info        (Optional) Activation layer information in case of a fused activation.
      */
     void configure(const ClCompileContext &compile_context, ITensorInfo *src1, ITensorInfo *src2, ITensorInfo *dst, const ActivationLayerInfo &act_info = ActivationLayerInfo());
-    /** Static function to check if given info will lead to a valid configuration of @ref ClElementwiseDivision
+    /** Static function to check if given info will lead to a valid configuration
      *
-     * @param[in] src1     First source tensor info. Data types supported: F16/F32.
-     * @param[in] src2     Second source tensor info. Data types supported: same as @p src1.
-     * @param[in] dst      Destination tensor info. Data types supported: same as @p src1.
-     * @param[in] act_info (Optional) Activation layer information in case of a fused activation.
+     * Similar to @ref ClElementwiseDivision::configure()
      *
      * @return a status
      */
@@ -70,8 +65,6 @@
 class ClElementwiseMax : public IClOperator
 {
 public:
-    /** Default Constructor */
-    ClElementwiseMax() = default;
     /** Configure function for a given list of arguments.
      *
      * @param[in]  compile_context The compile context to be used.
@@ -81,12 +74,9 @@
      * @param[in]  act_info        (Optional) Activation layer information in case of a fused activation.
      */
     void configure(const ClCompileContext &compile_context, ITensorInfo *src1, ITensorInfo *src2, ITensorInfo *dst, const ActivationLayerInfo &act_info = ActivationLayerInfo());
-    /** Static function to check if given info will lead to a valid configuration of @ref opencl::kernels::ClArithmeticKernel for max
+    /** Static function to check if given info will lead to a valid configuration
      *
-     * @param[in] src1     First source tensor info. Data types supported: U8/QASYMM8/QASYMM8_SIGNED/S16/QSYMM16/S32/U32/F16/F32.
-     * @param[in] src2     Second source tensor info. Data types supported: same as @p src1.
-     * @param[in] dst      Destination tensor info. Data types supported: same as @p src1.
-     * @param[in] act_info (Optional) Activation layer information in case of a fused activation.
+     * Similar to @ref ClElementwiseMax::configure()
      *
      * @return a status
      */
@@ -101,8 +91,6 @@
 class ClElementwiseMin : public IClOperator
 {
 public:
-    /** Default Constructor */
-    ClElementwiseMin() = default;
     /** Configure function for a given list of arguments.
      *
      * @param[in]  compile_context The compile context to be used.
@@ -112,12 +100,9 @@
      * @param[in]  act_info        (Optional) Activation layer information in case of a fused activation.
      */
     void configure(const ClCompileContext &compile_context, ITensorInfo *src1, ITensorInfo *src2, ITensorInfo *dst, const ActivationLayerInfo &act_info = ActivationLayerInfo());
-    /** Static function to check if given info will lead to a valid configuration of @ref opencl::kernels::ClArithmeticKernel for min
+    /** Static function to check if given info will lead to a valid configuration
      *
-     * @param[in] src1     First source tensor info. Data types supported: U8/QASYMM8/QASYMM8_SIGNED/S16/QSYMM16/S32/U32/F16/F32.
-     * @param[in] src2     Second source tensor info. Data types supported: same as @p src1.
-     * @param[in] dst      Destination tensor info. Data types supported: same as @p src1.
-     * @param[in] act_info (Optional) Activation layer information in case of a fused activation.
+     * Similar to @ref ClElementwiseMin::configure()
      *
      * @return a status
      */
@@ -132,8 +117,6 @@
 class ClElementwiseSquaredDiff : public IClOperator
 {
 public:
-    /** Default Constructor */
-    ClElementwiseSquaredDiff() = default;
     /** Configure function for a given list of arguments.
      *
      * @param[in]  compile_context The compile context to be used.
@@ -143,12 +126,9 @@
      * @param[in]  act_info        (Optional) Activation layer information in case of a fused activation.
      */
     void configure(const ClCompileContext &compile_context, ITensorInfo *src1, ITensorInfo *src2, ITensorInfo *dst, const ActivationLayerInfo &act_info = ActivationLayerInfo());
-    /** Static function to check if given info will lead to a valid configuration of @ref opencl::kernels::ClArithmeticKernel for squared difference
+    /** Static function to check if given info will lead to a valid configuration
      *
-     * @param[in] src1     First source tensor info. Data types supported: U8/QASYMM8/QASYMM8_SIGNED/S16/QSYMM16/F16/F32.
-     * @param[in] src2     Second source tensor info. Data types supported: same as @p src1.
-     * @param[in] dst      Destination tensor info. Data types supported: same as @p src1.
-     * @param[in] act_info (Optional) Activation layer information in case of a fused activation.
+     * Similar to @ref ClElementwiseSquaredDiff::configure()
      *
      * @return a status
      */
@@ -163,8 +143,6 @@
 class ClElementwisePower : public IClOperator
 {
 public:
-    /** Default Constructor */
-    ClElementwisePower() = default;
     /** Configure function for a given list of arguments.
      *
      * @param[in]  compile_context The compile context to be used.
@@ -174,12 +152,9 @@
      * @param[in]  act_info        (Optional) Activation layer information in case of a fused activation.
      */
     void configure(const ClCompileContext &compile_context, ITensorInfo *src1, ITensorInfo *src2, ITensorInfo *dst, const ActivationLayerInfo &act_info = ActivationLayerInfo());
-    /** Static function to check if given info will lead to a valid configuration of @ref opencl::kernels::ClArithmeticKernel for power
+    /** Static function to check if given info will lead to a valid configuration
      *
-     * @param[in] src1     First source tensor info. Data types supported: F16/F32.
-     * @param[in] src2     Second source tensor info. Data types supported: F16/F32.
-     * @param[in] dst      Destination tensor info. Data types supported: F16/F32.
-     * @param[in] act_info (Optional) Activation layer information in case of a fused activation.
+     * Similar to @ref ClElementwisePower::configure()
      *
      * @return a status
      */
diff --git a/src/runtime/gpu/cl/operators/ClElementwiseUnary.h b/src/runtime/gpu/cl/operators/ClElementwiseUnary.h
index b40e3e9..b9acf6f 100644
--- a/src/runtime/gpu/cl/operators/ClElementwiseUnary.h
+++ b/src/runtime/gpu/cl/operators/ClElementwiseUnary.h
@@ -35,8 +35,6 @@
 class ClRsqrt : public IClOperator
 {
 public:
-    /** Constructor */
-    ClRsqrt() = default;
     /** Initialize the function
      *
      * @param[in]  compile_context The compile context to be used.
@@ -44,10 +42,9 @@
      * @param[out] dst             Destination tensor info. Data types supported: same as @p src.
      */
     void configure(const ClCompileContext &compile_context, const ITensorInfo *src, ITensorInfo *dst);
-    /** Static function to check if given info will lead to a valid configuration of @ref ClRsqrt
+    /** Static function to check if given info will lead to a valid configuration
      *
-     * @param[in] src First source tensor info. Data types supported: F16/F32.
-     * @param[in] dst Destination tensor info. Data types supported: same as @p src.
+     * Similar to @ref ClRsqrt::configure()
      *
      * @return a status
      */
@@ -58,8 +55,6 @@
 class ClExp : public IClOperator
 {
 public:
-    /** Constructor */
-    ClExp() = default;
     /** Initialize the function
      *
      * @param[in]  compile_context The compile context to be used.
@@ -67,10 +62,9 @@
      * @param[out] dst             Destination tensor info. Data types supported: same as @p src.
      */
     void configure(const ClCompileContext &compile_context, const ITensorInfo *src, ITensorInfo *dst);
-    /** Static function to check if given info will lead to a valid configuration of @ref ClExp
+    /** Static function to check if given info will lead to a valid configuration
      *
-     * @param[in] src First source tensor info. Data types supported: F16/F32.
-     * @param[in] dst Destination tensor info. Data types supported: same as @p src.
+     * Similar to @ref ClExp::configure()
      *
      * @return a status
      */
@@ -81,8 +75,6 @@
 class ClNeg : public IClOperator
 {
 public:
-    /** Constructor */
-    ClNeg() = default;
     /** Initialize the function
      *
      * @param[in]  compile_context The compile context to be used.
@@ -90,10 +82,9 @@
      * @param[out] dst             Destination tensor info. Data types supported: same as @p src.
      */
     void configure(const ClCompileContext &compile_context, const ITensorInfo *src, ITensorInfo *dst);
-    /** Static function to check if given info will lead to a valid configuration of @ref ClNeg
+    /** Static function to check if given info will lead to a valid configuration
      *
-     * @param[in] src First source tensor info. Data types supported: F16/F32.
-     * @param[in] dst Destination tensor info. Data types supported: same as @p src.
+     * Similar to @ref ClNeg::configure()
      *
      * @return a status
      */
@@ -104,8 +95,6 @@
 class ClSin : public IClOperator
 {
 public:
-    /** Constructor */
-    ClSin() = default;
     /** Initialize the function
      *
      * @param[in]  compile_context The compile context to be used.
@@ -113,10 +102,9 @@
      * @param[out] dst             Destination tensor info. Data types supported: same as @p src.
      */
     void configure(const ClCompileContext &compile_context, const ITensorInfo *src, ITensorInfo *dst);
-    /** Static function to check if given info will lead to a valid configuration of @ref ClSin
+    /** Static function to check if given info will lead to a valid configuration
      *
-     * @param[in] src First source tensor info. Data types supported: F16/F32.
-     * @param[in] dst Destination tensor info. Data types supported: same as @p src.
+     * Similar to @ref ClSin::configure()
      *
      * @return a status
      */
@@ -127,8 +115,6 @@
 class ClLog : public IClOperator
 {
 public:
-    /** Constructor */
-    ClLog() = default;
     /** Initialize the function
      *
      * @param[in]  compile_context The compile context to be used.
@@ -136,10 +122,9 @@
      * @param[out] dst             Destination tensor info. Data types supported: same as @p src.
      */
     void configure(const ClCompileContext &compile_context, const ITensorInfo *src, ITensorInfo *dst);
-    /** Static function to check if given info will lead to a valid configuration of @ref ClLog
+    /** Static function to check if given info will lead to a valid configuration
      *
-     * @param[in] src First source tensor info. Data types supported: F16/F32.
-     * @param[in] dst Destination tensor info. Data types supported: same as @p src.
+     * Similar to @ref ClLog::configure()
      *
      * @return a status
      */
@@ -157,10 +142,9 @@
      * @param[out] dst             Destination tensor info. Data types supported: same as @p src.
      */
     void configure(const ClCompileContext &compile_context, const ITensorInfo *src, ITensorInfo *dst);
-    /** Static function to check if given info will lead to a valid configuration of @ref ClAbs
+    /** Static function to check if given info will lead to a valid configuration
      *
-     * @param[in] src First source tensor info. Data types supported: F16/F32.
-     * @param[in] dst Destination tensor info. Data types supported: same as @p src.
+     * Similar to @ref ClAbs::configure()
      *
      * @return a status
      */
@@ -178,10 +162,9 @@
      * @param[out] dst             Destination tensor info. Data types supported: same as @p src.
      */
     void configure(const ClCompileContext &compile_context, const ITensorInfo *src, ITensorInfo *dst);
-    /** Static function to check if given info will lead to a valid configuration of @ref ClRound
+    /** Static function to check if given info will lead to a valid configuration
      *
-     * @param[in] src First source tensor info. Data types supported: F16/F32.
-     * @param[in] dst Destination tensor info. Data types supported: same as @p src.
+     * Similar to @ref ClRound::configure()
      *
      * @return a status
      */
diff --git a/src/runtime/gpu/cl/operators/ClFill.h b/src/runtime/gpu/cl/operators/ClFill.h
index e632d88..cc79b91 100644
--- a/src/runtime/gpu/cl/operators/ClFill.h
+++ b/src/runtime/gpu/cl/operators/ClFill.h
@@ -36,8 +36,6 @@
 class ClFill : public IClOperator
 {
 public:
-    /** Constructor */
-    ClFill() = default;
     /** Initialise the kernel's tensor and filling value
      *
      * @param[in]     compile_context The compile context to be used.
@@ -46,11 +44,9 @@
      * @param[in]     window          Window to be used in case setting only part of a tensor. Default is nullptr.
      */
     void configure(const CLCompileContext &compile_context, ITensorInfo *tensor, const PixelValue &constant_value, Window *window = nullptr);
-    /** Static function to check if given info will lead to a valid configuration of @ref kernels::ClFillKernel
+    /** Static function to check if given info will lead to a valid configuration
      *
-     * @param[in] tensor         Source tensor info. Data types supported: All.
-     * @param[in] constant_value The value used to fill the planes of the tensor.
-     * @param[in] window         Window to be used in case setting only part of a tensor. Default is nullptr.
+     * Similar to ClFill::configure()
      *
      * @return a status
      */
diff --git a/src/runtime/gpu/cl/operators/ClFlatten.h b/src/runtime/gpu/cl/operators/ClFlatten.h
index 20ad06e..8bd619b 100644
--- a/src/runtime/gpu/cl/operators/ClFlatten.h
+++ b/src/runtime/gpu/cl/operators/ClFlatten.h
@@ -35,8 +35,6 @@
 class ClFlatten : public IClOperator
 {
 public:
-    /** Constructor */
-    ClFlatten() = default;
     /** Configure operator for a given list of arguments
      *
      * Valid data layouts:
diff --git a/src/runtime/gpu/cl/operators/ClFloor.h b/src/runtime/gpu/cl/operators/ClFloor.h
index f54eef9..90bdee6 100644
--- a/src/runtime/gpu/cl/operators/ClFloor.h
+++ b/src/runtime/gpu/cl/operators/ClFloor.h
@@ -35,8 +35,6 @@
 class ClFloor : public IClOperator
 {
 public:
-    /** Constructor */
-    ClFloor() = default;
     /** Configure operator for a given list of arguments
      *
      * @param[in] compile_context The compile context to be used.
@@ -44,10 +42,9 @@
      * @param[in] dst             Destination tensor info. Data type supported: same as @p src
      */
     void configure(const ClCompileContext &compile_context, const ITensorInfo *src, ITensorInfo *dst);
-    /** Static function to check if given info will lead to a valid configuration of @ref ClFloor
+    /** Static function to check if given info will lead to a valid configuration
      *
-     * @param[in] src Source tensor info. Data types supported: F16/F32.
-     * @param[in] dst Destination tensor info. Data type supported: same as @p src
+     * Similar to ClFloor::configure()
      *
      * @return a status
      */
diff --git a/src/runtime/gpu/cl/operators/ClLogicalNot.h b/src/runtime/gpu/cl/operators/ClLogicalNot.h
index 25ddf56..782ac08 100644
--- a/src/runtime/gpu/cl/operators/ClLogicalNot.h
+++ b/src/runtime/gpu/cl/operators/ClLogicalNot.h
@@ -35,8 +35,6 @@
 class ClLogicalNot : public IClOperator
 {
 public:
-    /** Constructor */
-    ClLogicalNot() = default;
     /** Configure operator for a given list of arguments
      *
      * @param[in]  compile_context The compile context to be used.
@@ -46,8 +44,7 @@
     void configure(const CLCompileContext &compile_context, const ITensorInfo *src, ITensorInfo *dst);
     /** Static function to check if given info will lead to a valid configuration
      *
-     * @param[in] src Soure tensor info. Data types supported: U8.
-     * @param[in] dst Destination tensor info. Data types supported: same as @p src.
+     * Similar to ClLogicalNot::configure()
      *
      * @return a status
      */
diff --git a/src/runtime/gpu/cl/operators/ClMul.h b/src/runtime/gpu/cl/operators/ClMul.h
index 4a662b3..29d5885 100644
--- a/src/runtime/gpu/cl/operators/ClMul.h
+++ b/src/runtime/gpu/cl/operators/ClMul.h
@@ -35,8 +35,6 @@
 class ClMul : public IClOperator
 {
 public:
-    /** Default Constructor */
-    ClMul() = default;
     /** Initialise the kernel's sources, dst and convertion policy.
      *
      * Valid configurations (src1,src2) -> Output :
@@ -81,8 +79,6 @@
 class ClComplexMul : public IClOperator
 {
 public:
-    /** Default Constructor */
-    ClComplexMul() = default;
     /** Initialise the kernel's sources, dst.
      *
      * @param[in]      compile_context The compile context to be used.
diff --git a/src/runtime/gpu/cl/operators/ClPRelu.h b/src/runtime/gpu/cl/operators/ClPRelu.h
index 70202ae..3a02030 100644
--- a/src/runtime/gpu/cl/operators/ClPRelu.h
+++ b/src/runtime/gpu/cl/operators/ClPRelu.h
@@ -38,8 +38,6 @@
 class ClPRelu : public IClOperator
 {
 public:
-    /** Default constructor */
-    ClPRelu() = default;
     /** Set the input and output tensor.
      *
      * @note If the output tensor is a nullptr or is equal to the input, the activation function will be performed in-place
@@ -50,11 +48,9 @@
      * @param[out] output          Destination tensor. Data type supported: same as @p input
      */
     void configure(const CLCompileContext &compile_context, ITensorInfo *input, ITensorInfo *alpha, ITensorInfo *output);
-    /** Static function to check if given info will lead to a valid configuration of @ref arm_compute::opencl::kernels::ClArithmeticKernel for PRELU
+    /** Static function to check if given info will lead to a valid configuration
      *
-     * @param[in] input  Source tensor info. Data types supported: QASYMM8/QASYMM8_SIGNED/F16/F32.
-     * @param[in] alpha  PRelu layer parameters. Data types supported: same of @p input.
-     * @param[in] output Destination tensor info. Data type supported: same as @p input
+     * Similar to ClPRelu::configure()
      *
      * @return a status
      */
diff --git a/src/runtime/gpu/cl/operators/ClPermute.h b/src/runtime/gpu/cl/operators/ClPermute.h
index 20e7a32..867aba0 100644
--- a/src/runtime/gpu/cl/operators/ClPermute.h
+++ b/src/runtime/gpu/cl/operators/ClPermute.h
@@ -35,8 +35,6 @@
 class ClPermute : public IClOperator
 {
 public:
-    /** Constructor */
-    ClPermute() = default;
     /** Initialise the kernel's inputs and outputs and permute vector
      *
      * @note Arbitrary permutation vectors are supported with rank not greater than 4
@@ -47,13 +45,9 @@
      * @param[in] perm            Permutation vector
      */
     void configure(const CLCompileContext &compile_context, const ITensorInfo *src, ITensorInfo *dst, const PermutationVector &perm);
-    /**  Static function to check if given info will lead to a valid configuration of @ref kernels::ClPermuteKernel.
+    /** Static function to check if given info will lead to a valid configuration
      *
-     * @note Arbitrary permutation vectors are supported with rank not greater than 4
-     *
-     * @param[in] src  First tensor src info. Data types supported: All.
-     * @param[in] dst  Output tensor info. Data types supported: same as @p src.
-     * @param[in] perm Permutation vector
+     * Similar to ClPermute::configure()
      *
      * @return a status
      */
diff --git a/src/runtime/gpu/cl/operators/ClQuantize.h b/src/runtime/gpu/cl/operators/ClQuantize.h
index 0b6d2c8..b15d389 100644
--- a/src/runtime/gpu/cl/operators/ClQuantize.h
+++ b/src/runtime/gpu/cl/operators/ClQuantize.h
@@ -35,8 +35,6 @@
 class ClQuantize : public IClOperator
 {
 public:
-    /** Constructor */
-    ClQuantize() = default;
     /** Set the input and output tensors.
      *
      * @param[in]  compile_context The compile context to be used.
diff --git a/src/runtime/gpu/cl/operators/ClReshape.h b/src/runtime/gpu/cl/operators/ClReshape.h
index 8cccc57..b3d9267 100644
--- a/src/runtime/gpu/cl/operators/ClReshape.h
+++ b/src/runtime/gpu/cl/operators/ClReshape.h
@@ -35,8 +35,6 @@
 class ClReshape : public IClOperator
 {
 public:
-    /** Constructor */
-    ClReshape() = default;
     /** Initialise the kernel's inputs and outputs
      *
      * @param[in]  compile_context The compile context to be used.
@@ -44,11 +42,9 @@
      * @param[out] output          Output info. Data type supported: Same as @p input
      */
     void configure(const CLCompileContext &compile_context, const ITensorInfo *input, ITensorInfo *output);
-
-    /** Static function to check if given info will lead to a valid configuration of @ref kernels::ClReshapeKernel
+    /** Static function to check if given info will lead to a valid configuration
      *
-     * @param[in] input  Input tensor info. Data type supported: All
-     * @param[in] output Output tensor info. Data type supported: Same as @p input
+     * Similar to ClReshape::configure()
      *
      * @return a status
      */
diff --git a/src/runtime/gpu/cl/operators/ClScale.h b/src/runtime/gpu/cl/operators/ClScale.h
index 6eccb59..905c43a 100644
--- a/src/runtime/gpu/cl/operators/ClScale.h
+++ b/src/runtime/gpu/cl/operators/ClScale.h
@@ -51,13 +51,9 @@
      * @param[in]     info            @ref ScaleKernelInfo descriptor to be used to configure
      */
     void configure(const CLCompileContext &compile_context, ITensorInfo *src, ITensorInfo *dst, const ScaleKernelInfo &info);
-
-    /** Static function to check if given info will lead to a valid configuration of @ref ClScale
+    /** Static function to check if given info will lead to a valid configuration
      *
-     * @param[in] src  Source tensor info. Data types supported: U8/QASYMM8/QASYMM8_SIGNED/S16/F16/F32.
-     * @param[in] dst  Output tensor info. Data type supported: Same as @p src
-     *                 All but the lowest two dimensions must be the same size as in the input tensor, i.e. scaling is only performed within the XY-plane.
-     * @param[in] info @ref ScaleKernelInfo descriptor to be used to validate
+     * Similar to ClScale::configure()
      *
      * @return a status
      */
@@ -71,4 +67,4 @@
 };
 } // namespace opencl
 } // namespace arm_compute
-#endif /*ARM_COMPUTE_CLSCALE_H */
+#endif /* ARM_COMPUTE_CLSCALE_H */
diff --git a/src/runtime/gpu/cl/operators/ClSoftmax.h b/src/runtime/gpu/cl/operators/ClSoftmax.h
index f19a51f..c85b193 100644
--- a/src/runtime/gpu/cl/operators/ClSoftmax.h
+++ b/src/runtime/gpu/cl/operators/ClSoftmax.h
@@ -51,15 +51,13 @@
      * @param[in]  src             Source tensor info. Data types supported: QASYMM8/QASYMM8_SIGNED/F16/F32 for Softmax and F16/F32 for Log Softmax
      * @param[out] dst             Destination tensor info. Data types supported: same as @p src
      * @param[in]  info            Contains information consumed by kernels for softmax described in @ref SoftmaxKernelInfo.
-     *
      */
     void configure(const CLCompileContext &compile_context, const ITensorInfo &src, ITensorInfo &dst, const SoftmaxKernelInfo &info);
-    /** Static function to check if the given info will lead to a valid configuration
+    /** Static function to check if given info will lead to a valid configuration
      *
-     * @param[in]  src  Source tensor info. Data types supported: QASYMM8/QASYMM8_SIGNED/F16/F32 for Softmax and F16/F32 for Log Softmax
-     * @param[out] dst  Destination tensor info. Data types supported: same as @p src
-     * @param[in]  info Contains information consumed by kernels for softmax described in @ref SoftmaxKernelInfo.
+     * Similar to ClSoftmax::configure()
      *
+     * @return a status
      */
     static Status validate(const ITensorInfo &src, const ITensorInfo &dst, const SoftmaxKernelInfo &info);
     // Inherited methods overridden:
diff --git a/src/runtime/gpu/cl/operators/ClSub.h b/src/runtime/gpu/cl/operators/ClSub.h
index bcad84d..2dac11c 100644
--- a/src/runtime/gpu/cl/operators/ClSub.h
+++ b/src/runtime/gpu/cl/operators/ClSub.h
@@ -39,8 +39,6 @@
 class ClSub : public IClOperator
 {
 public:
-    /** Default Constructor */
-    ClSub() = default;
     /** Configure function for a given list of arguments.
      *
      * Valid configurations (src1,src2) -> dst :
@@ -68,27 +66,9 @@
      */
     void configure(const ClCompileContext &compile_context, ITensorInfo *src1, ITensorInfo *src2, ITensorInfo *dst, ConvertPolicy policy,
                    const ActivationLayerInfo &act_info = ActivationLayerInfo());
-    /** Static function to check if given info will lead to a valid configuration of @ref ClSub
+    /** Static function to check if given info will lead to a valid configuration
      *
-     * Valid configurations (src1,src2) -> dst :
-     *
-     *   - (U8,U8)           -> U8
-     *   - (U8,U8)           -> S16
-     *   - (S16,U8)          -> S16
-     *   - (U8,S16)          -> S16
-     *   - (S16,S16)         -> S16
-     *   - (S32,S32)         -> S32
-     *   - (F16,F16)         -> F16
-     *   - (F32,F32)         -> F32
-     *   - (QASYMM8,QASYMM8) -> QASYMM8
-     *   - (QASYMM8_SIGNED,QASYMM8_SIGNED) -> QASYMM8_SIGNED
-     *   - (QSYMM16,QSYMM16) -> QSYMM16
-     *
-     * @param[in] src1     First source tensor info. Data types supported: U8/QASYMM8/QASYMM8_SIGNED/S16/QSYMM16/S32/F16/F32.
-     * @param[in] src2     Second source tensor info. Data types supported: U8/QASYMM8/QASYMM8_SIGNED/S16/QSYMM16/S32/F16/F32.
-     * @param[in] dst      Destination tensor info. Data types supported: U8/QASYMM8/QASYMM8_SIGNED/S16/QSYMM16/S32/F16/F32.
-     * @param[in] policy   Policy to use to handle overflow.
-     * @param[in] act_info (Optional) Activation layer information in case of a fused activation.
+     * Similar to @ref ClSub::configure()
      *
      * @return a status
      */
diff --git a/src/runtime/gpu/cl/operators/ClTranspose.h b/src/runtime/gpu/cl/operators/ClTranspose.h
index d898f67..dcd8082 100644
--- a/src/runtime/gpu/cl/operators/ClTranspose.h
+++ b/src/runtime/gpu/cl/operators/ClTranspose.h
@@ -35,8 +35,6 @@
 class ClTranspose : public IClOperator
 {
 public:
-    /** Constructor */
-    ClTranspose() = default;
     /** Initialise the kernel's inputs and outputs
      *
      * @param[in] compile_context The compile context to be used.
@@ -44,10 +42,9 @@
      * @param[in] dst             The dst tensor info. Data types supported: Same as @p src
      */
     void configure(const CLCompileContext &compile_context, const ITensorInfo *src, ITensorInfo *dst);
-    /**  Static function to check if given info will lead to a valid configuration of @ref kernels::ClTransposeKernel.
+    /** Static function to check if given info will lead to a valid configuration
      *
-     * @param[in] src First tensor src info. Data types supported: All.
-     * @param[in] dst Output tensor info. Data types supported: same as @p src.
+     * Similar to ClTranspose::configure()
      *
      * @return a status
      */
