В коде полиморфизма:
// (Has useful member functions here)
Правда ли? Если во всех трех местах есть много функций-членов (базовый класс и два производных класса), то владелец и не владеющий автором действительно разные звери. Вероятно, тогда лучше разделить их на разные классы, чем иметь класс, который ведет себя очень по-разному в соответствии с установленным в нем логическим флагом, в соответствии с которым был вызван конструктор.
Я подозреваю, что все полезные функции-члены находятся в базовом классе, и все производные классы делают это изменение конструкции и разрушение. В этом случае я бы хотел класс smart_fd
, который содержит fd и знает, как его утилизировать (вам нужно два случая - вызвать close или ничего не делать. shared_ptr
разрешает произвольную деструктивную функцию, но вы, вероятно, этого не делаете нужно здесь).
Затем добавьте один из них в CommandWriter и инициализируйте его по-разному в зависимости от того, какой конструктор CommandWriter вызывается.
Практическое правило: классы, управляющие ресурсами, больше ничего не должны делать.