Почему деструктор вызывается при создании экземпляра MyClass
?
Это не так. Тем не менее, он должен вызываться автоматически, когда экземпляр выходит из области видимости. Если это приватно, компилятор не должен генерировать этот код, следовательно, ошибка.
Если вы думаете, что сделать приватный деструктор неясным, другой способ ограничить класс динамическим размещением - сделать все конструкторы приватными и иметь только функции MyClass::create()
, возвращающие динамически распределенные объекты:
class MyClass {
public:
static MyClass* create() {return new MyClass();}
static MyClass* create(const Foo& f) {return new MyClass(f);}
private:
MyClass();
MyClass(const Foo&);
};
Обратите внимание, что возвращение обнаженных указателей на объекты, которые должны быть удалены, осуждается Вместо этого вы должны вернуть умные указатели:
class MyClass {
public:
static std::shared_ptr<MyClass> create() {return new MyClass();}
static std::shared_ptr<MyClass> create(const Foo& f) {return new MyClass(f);}
// ...
};