diff --git a/include/connection.hpp b/include/connection.hpp index 1d3a273..c6d557c 100644 --- a/include/connection.hpp +++ b/include/connection.hpp @@ -92,6 +92,25 @@ public: _instance.copy_connection_properties(*this); } + /*! + * @brief Copy constructor. A new CURLWrapper is constructed. + * + * @since 0.5.2 + */ + Connection(const Connection &other) = default; + + //! Move constructor + Connection(Connection &&other) noexcept = delete; + + //! Destructor + ~Connection() noexcept override = default; + + //! Copy assignment operator + Connection& operator=(const Connection &other) = delete; + + //! Move assignment operator + Connection& operator=(Connection &&other) noexcept = delete; + /*! * @brief Make a HTTP GET call with parameters. * diff --git a/include/curl_wrapper.hpp b/include/curl_wrapper.hpp index 6eb9d93..ffe0876 100644 --- a/include/curl_wrapper.hpp +++ b/include/curl_wrapper.hpp @@ -70,8 +70,12 @@ public: */ CURLWrapper(); - //! Copy constructor - CURLWrapper(const CURLWrapper &other) = delete; + /*! + * @brief Copy constructor. Does the same as the Constructor. + * + * @since 0.5.2 + */ + CURLWrapper(const CURLWrapper &); //! Move constructor CURLWrapper(CURLWrapper &&other) noexcept = delete; @@ -253,6 +257,13 @@ private: string _curl_buffer_body; bool _stream_cancelled; + /*! + * @brief Initializes curl and sets up connection. + * + * @since 0.5.2 + */ + void init(); + /*! * @brief libcurl write callback function. * diff --git a/include/instance.hpp b/include/instance.hpp index 225f106..1997068 100644 --- a/include/instance.hpp +++ b/include/instance.hpp @@ -65,6 +65,25 @@ public: , _max_chars{0} {} + /*! + * @brief Copy constructor. A new CURLWrapper is constructed. + * + * @since 0.5.2 + */ + Instance(const Instance &other) = default; + + //! Move constructor + Instance(Instance &&other) noexcept = delete; + + //! Destructor + ~Instance() noexcept override = default; + + //! Copy assignment operator + Instance& operator=(const Instance &other) = delete; + + //! Move assignment operator + Instance& operator=(Instance &&other) noexcept = delete; + /*! * @brief Set the properties of the connection of the calling class up. * diff --git a/src/curl_wrapper.cpp b/src/curl_wrapper.cpp index 9341069..0d78e6d 100644 --- a/src/curl_wrapper.cpp +++ b/src/curl_wrapper.cpp @@ -41,9 +41,7 @@ using std::uint16_t; // No one will ever need more than 65535 connections. 😉 static atomic curlwrapper_instances{0}; -CURLWrapper::CURLWrapper() - : _curl_buffer_error{} - , _stream_cancelled{false} +void CURLWrapper::init() { if (curlwrapper_instances == 0) { @@ -55,6 +53,23 @@ CURLWrapper::CURLWrapper() _connection = curl_easy_init(); setup_curl(); } + +CURLWrapper::CURLWrapper() + : _connection{} + , _curl_buffer_error{} + , _stream_cancelled{false} +{ + init(); +} + +CURLWrapper::CURLWrapper(const CURLWrapper &) + : _connection{} + , _curl_buffer_error{} + , _stream_cancelled{false} +{ + init(); +} + CURLWrapper::~CURLWrapper() noexcept { curl_easy_cleanup(_connection);