Назад к вопросам
Middle+
100
questionbank

Как сделать так, чтобы пользователь класса не мог создать объект этого класса в куче?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Объявить деструктор приватным.

class MyClass {
private:
    ~MyClass() {
        // Код деструктора
    }

    // Другие члены класса
public:
    // Конструкторы
    MyClass() {
        // Код конструктора
    }

    // Другие методы
};

// В коде, где пытаемся создать объект в куче:
// MyClass* obj = new MyClass(); // Ошибка компиляции: доступ к приватному деструктору

// Создание объекта на стеке разрешено:
// MyClass obj;

Пользователь сможет создавать объекты такого класса только на стеке, поскольку компилятор явно вызывает деструктор для освобождения памяти при выходе из области видимости. Но при попытке создать объект в куче с помощью new, компилятор генерирует код для последующего вызова delete, который требует доступа к деструктору. Из-за приватного доступа вызвать delete становится невозможно, что вызывает ошибку компиляции.