Безобъектный класс в C ++ - PullRequest
1 голос
/ 24 июня 2019

Как создать класс, который не позволяет создавать его объект, не имеет чисто виртуальных функций, не имеет частного конструктора.Но может быть унаследован от производного класса, а функции-члены могут быть переопределены в c ++ - возможно ли вообще создать такой класс?

1 Ответ

3 голосов
/ 24 июня 2019

Одним из способов является создание конструкторов protected.


Другим способом является создание деструктора и operator new защиты.Публичный деструктор необходим для создания объектов со статическим и автоматическим сроком хранения, а также для delete (но не для new).

Пример:

struct X {
protected:
    ~X();
    static void* operator new(size_t);
    static void* operator new[](size_t);
};

int main() {
    X x;          // error: destructor is non-public.
    X* p = new X; // error: operator new is non-public.
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...