Comment procède-t-on pour créer des classe qui ne peuvent être instanciée que sous forme de pointeur?

J'ai essayé de rendre privé tous ses constructeurs et surcharger l'opérateur "new", ça m'a permi de restreindre la déclaration de cette classe à un pointeur mais lorsque j'appèle le "new" k'ai des erreur d'accès
voici ce que j'ai pu faire:

L'interface de la classe

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
nonpublic.h
 
// Une classe qui n'a pas de constructeur public
#include<stddef.h>
 
class nonpublic
 { nonpublic(int = 0);
   int x;
   public:
    void Print();
    void* operator new(size_t);
 };
La définition de la classe

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
nonpublic.cpp
 
#include<stdlib.h>
#include<iostream>
#include<stddef.h>
#include"nonpublic.h"
 
nonpublic::nonpublic(int i): x(i) {} 
 
void nonpublic::Print() { std::cout<<x<<std::endl; }
 
void* nonpublic::operator new(size_t size) 
 { 
   char* chn = ::new char[size];
   void* var=static_cast<void*>(chn);
   nonpublic* val= static_cast<nonpublic* >(var); 
   return val;
 }
Mais lorsque je met cette instruction dans le main
Code : Sélectionner tout - Visualiser dans une fenêtre à part
nonpublic* n = new nonpublic;
le compilo me renvoie
Code : Sélectionner tout - Visualiser dans une fenêtre à part
C:\Dev-Cpp\Projet\nonpublic\nonpublic.h `nonpublic::nonpublic(int = 0)' is private