2012-07-12 58 views
0

在试图了解POCO网络库here,我碰到下面的代码片段来了:返回一个指针,并传递一个const引用

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

我无法理解该方法的返回类型(HTTPRequestHandler*)和该方法的参数(const HTTPServerRequest &)。

为什么返回类型指针是HTTPRequestHandlernew MyRequestHandler是否将地址返回到可以通过其基本类型引用的对象?

此外,据我所知const是用来使引用不可变,以便该方法不会改变引用的对象,但没有为引用类型提供名称,并且它在createRequestHandler方法中没有使用。有人可以告诉我可能会发生什么吗?

由于

回答

3

返回类型

如果你看一下“学习波苏”代码网址,

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()内不能更改该关键字。

1

有两种方法来返回一个方式而不进行它的一个副本在C++访问对象:返回一个指向它或返回对它的引用。指针往往是各种原因的首选方法(例如,引用不可重新分配)。 请注意,如果它返回HTTPRequestHandler而不是指向它的指针,则表示该对象将被复制。

不必提供参数名称,因为它没有被使用。必须提供类型,以便功能签名完成。你同样不必提供时向前声明一个函数,因为编译器只关心类型,他们进来的顺序名称。

相关问题