Назад к вопросам
Middle+
100
questionbank
Как сделать так, чтобы пользователь класса не мог создать объект этого класса в куче?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Объявить деструктор приватным.
class MyClass {
private:
~MyClass() {
// Код деструктора
}
// Другие члены класса
public:
// Конструкторы
MyClass() {
// Код конструктора
}
// Другие методы
};
// В коде, где пытаемся создать объект в куче:
// MyClass* obj = new MyClass(); // Ошибка компиляции: доступ к приватному деструктору
// Создание объекта на стеке разрешено:
// MyClass obj;
Пользователь сможет создавать объекты такого класса только на стеке, поскольку компилятор явно вызывает деструктор для освобождения памяти при выходе из области видимости. Но при попытке создать объект в куче с помощью new, компилятор генерирует код для последующего вызова delete, который требует доступа к деструктору. Из-за приватного доступа вызвать delete становится невозможно, что вызывает ошибку компиляции.