J'ai cet arrangement :
class LexedFile
{
friend class Lex;
//...
private:
~LexedFile();
};
class Lex
{
//...
private:
std::map<std::string, std::unique_ptr<LexedFile> > Files;
};
Une Lex est le seul créateur de LexedFile
et conserve la propriété de tous les objets LexedFile
les objets qu'il crée dans une carte. Malheureusement, le compilateur s'en plaint fortement en raison des règles de visibilité de la variable map à la variable LexedFile
destructeur. Je peux résoudre ce problème en faisant ~LexedFile()
public, mais bien sûr la raison pour laquelle je l'ai rendu privé est de renforcer la décision que les objets de ce type appartiennent seulement à Lex
objets.
Ma question est la suivante : quelles sont mes options portables pour faire unique_ptr
heureux et gardant toujours ~LexedFile()
privé ? Par portable, je suppose qu'il doit au moins fonctionner avec la dernière version de g++ et la dernière version de Visual C++.
J'ai essayé d'insérer un truc du genre :
friend class std::unique_ptr<LexedFile>;
mais même si cela avait fonctionné (ce qui n'a pas été le cas), cela semblait reposer sur des hypothèses concernant l'implémentation qui pourraient ne pas être portables.