读书人

为什么警告this,该怎么处理

发布时间: 2012-03-18 13:55:39 作者: rapoo

为什么警告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。

读书人网 >C++

热点推荐