Можно ли делать обертку вокруг 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;
};