返回指针并传入常量引用

Returning a pointer and passing in a const reference

本文关键字:常量 引用 指针 返回      更新时间:2023-10-16

在这里学习poco网络库时,我遇到了以下片段:

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

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

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

此外,我知道const是用来使引用不可变的,这样该方法就不会改变被引用的对象,但没有为引用类型提供名称,createRequestHandler方法中也没有使用它。有人能告诉我这里可能发生了什么吗?

感谢

返回类型

如果你看"学习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()中更改。

有两种方法可以返回访问对象而不在C++中复制对象的方法:返回指向对象的指针或返回对对象的引用。由于各种原因(例如,引用不可重新分配),指针往往是首选方法。请注意,如果它返回HTTPRequestHandler而不是指向它的指针,那么这意味着对象将被复制。

不必提供参数名称,因为它未被使用。必须提供类型,以便函数签名完整。类似地,在正向声明函数时不必提供名称,因为编译器只关心类型和它们的顺序