在尝试了解Poco网络库here时,我遇到了以下片段:

class MyRequestHandlerFactory : public HTTPRequestHandlerFactory
{
public:
  virtual HTTPRequestHandler* createRequestHandler(const HTTPServerRequest &)
  {
    return new MyRequestHandler;
  }
};


我在理解方法(HTTPRequestHandler*)的返回类型和方法(const HTTPServerRequest &)的参数时遇到麻烦。

为什么返回类型为HTTPRequestHandler指针? new MyRequestHandler是否将地址返回给可以由其基本类型引用的对象?

另外,我知道const用于使引用不可变,因此该方法不会使引用的对象发生突变,但是没有为引用类型提供名称,并且createRequestHandler方法中未使用该名称。有人可以告诉我这里会发生什么吗?

谢谢

最佳答案

返回类型

如果您查看“ Learning Poco”代码网站,

class MyRequestHandler : public HTTPRequestHandler
{
    // ... removed code
};


MyRequestHandler派生自HTTPRequestHandler。因此,由于继承,MyRequestHandler是HTTPRequestHandler。因此,返回指向MyRequestHandler的指针是有效的,因为它也是指向HTTPRequestHandler的指针。

功能参数

该代码段令人困惑,因为它将参数指定为类型,但没有变量名。实际上与以下内容相同:

class MyRequestHandlerFactory : public HTTPRequestHandlerFactory
{
public:
  virtual HTTPRequestHandler* createRequestHandler(const HTTPServerRequest & notUsed)
  {
    return new MyRequestHandler;
  }
};


'notUsed'变量未使用。所以你问,为什么有争论呢?因为它覆盖了基类HTTPRequestHandlerFactory中声明的函数。该函数将带有参数const HTTPServerRequest &,因此它也必须出现在派生类的重写函数中(即使未使用)。如果要在函数createRequestHandler()中使用'notUsed',则const关键字可确保不能在createRequestHandler()内部对其进行更改。

08-16 14:04