Можно ли делать обертку вокруг HANDLE копируемой? С++

Хочу сделать класс Process, который будет ООП-оберткой вокруг HANDLE процесса. И мне стало интересно как сделать такой класс копируемым. Ведь в деструкторе данный процесс должен уничтожать хэндл через CloseHandle, если мы скопируем такой класс вместе с хэндлом, потом один класс уничтожится, то во втором классе хэндл станет невалидным. Отсюда вопрос: можно ли просто взять и сделать такую обертку копируемой? Если нет, то насколько правильным будет использование std::shared_ptr с делитером ввиде CloseHandle?

Минимальный пример моей обертки:

  class CMDProcess
  {
  public:
    CMDProcess() noexcept;
    CMDProcess(const CMDProcess &) = default;
    CMDProcess(CMDProcess &&) = default;
    CMDProcess& operator=(const CMDProcess &) = default;
    CMDProcess& operator=(CMDProcess &&) = default;
    ~CMDProcess() noexcept;

    void CloseProcess() noexcept;
    std::optional<DWORD> GetExitCode() const noexcept;
    bool OpenProcess(std::string commandLine) noexcept;
    void WaitForOutput() noexcept;

  private:
    PROCESS_INFORMATION m_procInfo;
    STARTUPINFO m_startInfo;
    HANDLE m_process;
    bool m_isOpen;
  };

Ответы (0 шт):