hur.cn - 华软网

 热门搜索

一个C++的经典问题!!!

  作者:未知    来源:网络    更新时间:2010/12/10
看他人写的一段很经典的代码,在里面定义了HandlerSet fReadHandlers = new HandlerSet;我追踪了一下这个执前进程 首先是进入HandlerSet构造函数的初始化列表 : fHandlers(&fHandlers) {
,然后是执行 HandlerDescriptor::HandlerDescriptor构造函数,最后在进入fHandlers.socketNum = -1 在我追踪执行的时候我有个地方不明白,问题以下:
  
  1:就是HandlerSet 这个类的构造函数里面有点不明白。 fHandlers是HandlerDescriptor 的对象,初始化列表中fHandlers(&fHandlers)我的理解是对fHandlers初始化赋值,所以执行的时候会进入 HandlerDescriptor::HandlerDescriptor构造函数,然则问题出现了 之前我并没有对(&fHandlers)里面这个fHandlers赋值啊! 这个值是在什么时候赋获得的呢??(&fHandlers)作为参数传进去总是已知量吧。然则前面并没有对 (&fHandlers)赋值啊,他的值是从那里得来的??    而且这个值在我第一次执行的时候就等于this!我单步执行获得的。
HandlerSet::HandlerSet()
  : fHandlers(&fHandlers) {
  fHandlers.socketNum = -1; // shouldn't ever get looked at, but in case...
}

HandlerDescriptor::HandlerDescriptor(HandlerDescriptor* nextHandler) {
  // Link this descriptor into a doubly-linked list:
  if (nextHandler == this) { // initialization
  fNextHandler = fPrevHandler = this;
  } else {
  fNextHandler = nextHandler;
  fPrevHandler = nextHandler->fPrevHandler;
  nextHandler->fPrevHandler = this;
  fPrevHandler->fNextHandler = this;
  }
}

class HandlerDescriptor {
  HandlerDescriptor(HandlerDescriptor* nextHandler);
public:
  int socketNum;
private:
  // Descriptors are linked together in a doubly-linked list:
  friend class HandlerSet;
  HandlerDescriptor* fNextHandler;
  HandlerDescriptor* fPrevHandler;
 };

class HandlerSet {
public:
  HandlerSet();
  virtual ~HandlerSet();
private:
  HandlerDescriptor fHandlers;
};
---华软 网友回答---
你去C/C++片面问吧。
---华软网友回复---
题目貌似有点忽悠人啊~~
---华软网友回复---
又是这个?
---华软网友回复---
引用 3 楼 visualeleven 的回复:
又是这个?

+1
---华软网友回复---
这是经典问题?第一次遇到~~
---华软网友回复---
你传进去的是指针,当然没问题了。
在new HandlerSet的时候所占的内存已经分配好了,然则未初始化。
所以在HandlerDescriptor::HandlerDescriptor(HandlerDescriptor* nextHandler)的时候
nextHandler和this是一致的,但指向的内容都是为初始化。只有结束了才算有效。
---华软网友回复---
lz能够尝试理解一下这个,跟你遇到的情况差不多
C++">
int x = (int)&x;

     
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。