我不明白为什么我声明一个空的内部结构并将其传递给构造函数

I don't understand why I declare an empty internal structure and pass it in the constructor

本文关键字:结构 内部 构造函数 为什么 明白 声明 一个      更新时间:2023-10-16

当我阅读Hypodermic的源代码时,我发现在其容器的构造函数中声明了一个空结构。我不明白它为什么这么做?

class Container : public std::enable_shared_from_this< Container >
{
private:
struct PrivateKey {};

public:
Container(const PrivateKey&,
const std::shared_ptr< IRegistrationScope >& registrationScope,
const std::shared_ptr< IRuntimeRegistrationBuilder >& runtimeRegistrationBuilder)
: m_registrationScope(registrationScope)
, m_runtimeRegistrationBuilder(runtimeRegistrationBuilder)
{
}
static std::shared_ptr<Container> create(const std::shared_ptr<IRegistrationScope>& registrationScope,
const std::shared_ptr<IRuntimeRegistrationBuilder>& runtimeRegistrationBuilder)
{
return std::make_shared<Container>(PrivateKey(), registrationScope, runtimeRegistrationBuilder);
}
// other code...
};

PrivateKey是在上面的代码中定义的,我不明白它解决了什么问题。它似乎没有任何作用。

正如@Eljay在评论中所说,当使用std::make_shared时,构造函数必须是可访问的。

此工厂方法背后的思想是确保没有组件将获得不是std::shared_ptrContainer实例,从而在Container方法内强制执行shared_from_this()的合法性。

如果你需要进一步的解释,请随时通过GitHub联系我。