Middle+
230
Hogyan lehet megakadályozni, hogy egy osztály felhasználója létrehozhasson egy objektumot ennek az osztálynak a heapen?
Válasz az MI-től
sobes.tech MI
Объявить деструктор приватным.
class MyClass {
private:
~MyClass() {
// Код деструктора
}
// Другие члены класса
public:
// Конструкторы
MyClass() {
// Код конструктора
}
// Другие методы
};
// В коде, где пытаемся создать объект в куче:
// MyClass* obj = new MyClass(); // Ошибка компиляции: доступ к приватному деструктору
// Создание объекта на стеке разрешено:
// MyClass obj;
Пользователь сможет создавать объекты такого класса только на стеке, поскольку компилятор явно вызывает деструктор для освобождения памяти при выходе из области видимости. Но при попытке создать объект в куче с помощью new, компилятор генерирует код для последующего вызова delete, который требует доступа к деструктору. Из-за приватного доступа вызвать delete становится невозможно, что вызывает ошибку компиляции.