У меня есть вопрос о следующем коде:Виртуальный деструктор для повышения: неквалифицированные классы?
class MyClass : private boost::noncopyable
{
public:
MyClass() {}
virtual ~MyClass() {}
}
class OtherClass : private boost::noncopyable
{
private:
MyClass* m_pMyClass;
}
Мои мысли, что MyClass не могут быть скопированы с помощью конструкции или назначения. Использование виртуального деструктора необходимо, если я хочу поддерживать вывод классов из MyClass, которые я не хочу поддерживать. Я не собираюсь создавать указатели на этот класс и передавать их.
Мне не нужен синглтон, и я не вижу недостатка в удалении виртуального деструктора.
Должен ли я представить потенциальную проблему, если удалить виртуальный деструктор для класса noncopyable? Есть ли более эффективные методы обработки класса, который не должен быть Singleton, но я хочу только один экземпляр в другом классе и не поддерживать наследование?
Если вы не хотите, чтобы поддерживать наследование, рассмотреть вопрос о внесении конструктор приватным и иметь статический create-function. – Macke
Маркус: Хотя для этого нужны другие вещи, которые он не хочет поддерживать, например, копирование или прохождение указателей (фабрика должна возвращать по значению или возвращать указатель). – 2010-01-12 20:58:02