私はこの取り決めを持っています:
class LexedFile
{
friend class Lex;
//...
private:
~LexedFile();
};
class Lex
{
//...
private:
std::map<std::string, std::unique_ptr<LexedFile> > Files;
};
Lexはオブジェクトの唯一の作成者であり、マップ内に作成するLexedFile
すべてのオブジェクトの所有権を保持します。残念ながら、マップ変数からデストラクタLexedFile
への可視性ルールのために、コンパイラはこれについて非常に不平を言います。LexedFile
この問題は公開することで解決できます~LexedFile()
が、もちろん非公開にしたのは、そのタイプのオブジェクトはオブジェクトにのみ属するという決定を強化するためLex
です。
私の質問は、幸せになり、プライベートunique_ptr
を維持するためのポータブルオプションは何ですか?~LexedFile()
ポータブルでは、少なくとも最新のg++と最新のVisualC++で動作する必要があると思います。
私は次のようなものを挿入することに突き刺しました:
friend class std::unique_ptr<LexedFile>;
しかし、それが機能したとしても(機能しなかったとしても)、移植性がない可能性のある実装に関する仮定に依存しているように見えました。