4

当我阅读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是在上面的代码中定义的,我不明白它解决了什么问题。它似乎没有做任何事情。

4

1 回答 1

1

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

这个工厂方法背后的想法是确保没有组件会得到一个实例,Container这不是std::shared_ptr因此强制shared_from_this() 内部 Container方法的合法性。

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

于 2021-02-08T14:47:50.060 回答