返回一个指针,并传递一个const引用
在试图了解POCO网络库here,我碰到下面的代码片段来了:返回一个指针,并传递一个const引用
class MyRequestHandlerFactory : public HTTPRequestHandlerFactory {
public:
virtual HTTPRequestHandler* createRequestHandler(const HTTPServerRequest &)
{
return new MyRequestHandler;
}
};
我无法理解该方法的返回类型(HTTPRequestHandler*
)和该方法的参数(const HTTPServerRequest &
)。
为什么返回类型指针是HTTPRequestHandler
? new MyRequestHandler
是否将地址返回到可以通过其基本类型引用的对象?
此外,据我所知const
是用来使引用不可变,以便该方法不会改变引用的对象,但没有为引用类型提供名称,并且它在createRequestHandler
方法中没有使用。有人可以告诉我可能会发生什么吗?
由于
回答:
返回类型
如果你看一下“学习波苏”代码网址,
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
而不是指向它的指针,则表示该对象将被复制。
不必提供参数名称,因为它没有被使用。必须提供类型,以便功能签名完成。你同样不必提供时向前声明一个函数,因为编译器只关心类型,他们进来的顺序名称。
以上是 返回一个指针,并传递一个const引用 的全部内容, 来源链接: utcz.com/qa/259193.html