- 论坛徽章:
- 0
|
我在看QT4.5.2的代码中,看到以下代码
在/src/network/socket/qtcpserver.cpp第273行:
- static const QNetworkProxy &proxy = *(QNetworkProxy *)0;
- d->socketEngine = QAbstractSocketEngine::createSocketEngine(QAbstractSocket::TcpSocket, proxy, this);
复制代码 QAbstractSocketEngine::createSocketEngine 在/src/network/socket/qabstractsocketengine.cpp的第96行-
- QAbstractSocketEngine *QAbstractSocketEngine::createSocketEngine(QAbstractSocket::SocketType socketType, const QNetworkProxy &proxy, QObject *parent)
- {
- // proxy type must have been resolved by now
- if (proxy.type() == QNetworkProxy::DefaultProxy)
- return 0;
复制代码 proxy.type()实现在/src/network/kernel/qnetworkproxy.cpp的第514行:- QNetworkProxy::ProxyType QNetworkProxy::type() const
- {
- return d ? d->type : DefaultProxy;
- }
复制代码 d为proxy的一个私有成员,在/src/network/kernel/qnetworkproxy.h的第176行- private:
- QSharedDataPointer<QNetworkProxyPrivate> d;
复制代码 QSharedDataPointer就把他看成是boost库中的智能指针吧.
当我看到static const QNetworkProxy &proxy = *(QNetworkProxy *)0;我还奇怪了,去地址为0不是明显出错嘛,
后来发现如果调用的函数不使用该类的成员就没有问题, 调用的函数使用了改类的成员的时候,就会报地址访问错误了.
那么QT在proxy.type()中不是访问了变量d吗, 为什么就没有错呢? |
|