Вопрос касается дизайна, а не реализации. Я склонен согласиться с вашим коллегой, если указатель находится в базе, он, похоже, указывает на то, что базовый объект отвечает за управление ресурсом, а не производный тип.
На самом деле, странным является тот факт, что производный конструктор модифицирует базовый элемент, возможно, имеет смысл передать указатель на базовый конструктор, и в этом случае семантика будет более понятной: базовая получает ресурс во время строительства и отвечает за управление им в течение срока его службы.
Если база не должна управлять ресурсом, то почему указатель на этом уровне? Почему он не является членом производного типа?
Обратите внимание, что при управлении ресурсом следует учитывать правило из трех 1 : если вам нужно реализовать одно из copy- конструктор , оператор присваивания или деструктор , тогда вы, вероятно, захотите реализовать три из них (дополнительно рассмотрите возможность реализации no-throw swap
, что будет удобно).
Как только вы добавите copy-constructor и assignment-operator к миксу, вы, вероятно, увидите, что естественное место для управления ресурсом там, где он содержится.
1 Правило является общим, поскольку есть веские причины не всегда применять их все. Например, если вы управляете своими ресурсами внутри членов, которые реализуют RAII (как интеллектуальные указатели), вам может потребоваться предоставить copy-construction и оператора присваивания для семантики глубокого копирования , но уничтожение не потребуется. Кроме того, в некоторых случаях вам может потребоваться отключить * copy-construction * и / или назначений .