我有这样的安排:
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++ 和最新的 Visual C++ 一起工作。
我尝试插入类似的东西:
friend class std::unique_ptr<LexedFile>;
但即使它有效(它没有)它似乎有点依赖于可能不可移植的实现的假设。