C++ 使_唯一无法访问静态成员中的私有构造函数

C++ 使_唯一无法访问静态成员中的私有构造函数,c++,unique-ptr,C++,Unique Ptr,我的班级结构如下: S类{ 公众: S(){} }; T类{ 私人: std::唯一的ptr a; T(S); 公众: 静态标准::唯一的\u ptr生成\u项(){ std::unique_ptr s_instance=std::make_unique(); 返回std::make_unique(std::move(s_实例)); } }; 但是,当我尝试在make_项中创建一个唯一的_ptr时,它会将构造函数视为私有的 有没有办法允许在类本身的静态成员函数中使用私有构造函数?因为一个成员是

我的班级结构如下:

S类{
公众:
S(){}
};
T类{
私人:
std::唯一的ptr a;
T(S);
公众:
静态标准::唯一的\u ptr生成\u项(){
std::unique_ptr s_instance=std::make_unique();
返回std::make_unique(std::move(s_实例));
}
};
但是,当我尝试在make_项中创建一个唯一的_ptr时,它会将构造函数视为私有的


有没有办法允许在类本身的静态成员函数中使用私有构造函数?因为一个成员是S(一个相当重的对象)的唯一ptr,我们不希望使用副本。

正如yksisarvinen在评论中提出的,解决这一问题的方法是用
std::unique(新的T(S))
替换
make_unique

T类{
私人:
std::唯一的ptr a;
T(S);
公众:
静态标准::唯一的\u ptr生成\u项(){
//创造
std::unique_ptr s_instance=std::make_unique();
返回std::unique_ptr(新的T(s_实例));
}
};

I支持重复命题,但是
std::make_unique
可以替换为
std::unique_ptr(新X)没有任何性能损失,因此不需要该问题中的技巧。@Yksisarvinen,但这不是异常安全!如果这个约束是相关的,工厂模式是更好的方法。回答你自己的问题是可以的,但是请注意,这个问题有点不清楚。我建议您添加缺少的
,声明
S
和错误消息,以便其他人可以实际看到问题