c++ - 返回指针并传入 const 引用

标签 c++ pointers reference httprequest poco-libraries

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

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++ - 返回指针并传入 const 引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11444790/

相关文章:

c++ - 诸如 5 之类的数字是技术引用还是值?

c++ - 值中的串联位

c++ - 根据模板 C++ 的类型具有可变类型的类成员

c - 二维数组(int)在数据输入时意外崩溃?

c - 未初始化和空指针之间的区别

c++ - 尝试多线程

c++ - 当相机完全放在前面时看不到物体

c++ - 在 C++ 中使用模板

c - 为什么在 C 中将指针的地址传递给函数

java - .equals() 和 == 有什么区别?