为什么警告this
#ifndef DLINK_H
#define DLINK_H
//(c) ChenYu 2007.4.29
class DLink
{
public:
DLink(int i_d):p_prev(this),p_next(this),id(i_d){}//问题
int Id() const {return id;}
DLink const *Next() const {return p_next;}
DLink *Next() {return p_next;}
void SetNext(DLink *next){p_next=next;}
DLink const *Prev() const{return p_prev;}
DLink *Prev(){return p_prev;}
void SetPrev(DLink *prev){p_prev=prev;}
void Unlink();
private:
int id;
DLink *p_prev;
DLink *p_next;
};
#endif
为什么编译器警告我this有问题,用的是VS2005
[解决办法]
正常。因为构造函数还没有完成,通过this调用任何东西都可能触发bug。
于你此处,没有问题的,可以忽略这个warning。
[解决办法]
初始化时,用NULL比较好拔。
[解决办法]
编译器具体给出的错误贴上来看看?
我用gcc测试的warning是初始化列表和变量在类中被定义的顺序不一样,有可能会造成问题。
[解决办法]
初始化列表中的数据是在类构建之前。此时this指针没有意义
[解决办法]
这只是一个警告,而实际上在你这种情况下,这个警告不应该出。属于VS2005编译器比较弱导致的。
该警告的原意是为了避免对象还没有初始化完成时,就去引用它的数据成员。
但是,楼主初始化列表中p_prev及p_next都属于内置类型,完全不存在上面说的这个问题。
以上纯属猜测,楼主问问题应当把编译器信息贴出来,因为不是每个人都恰好有VS2005。