为什么警告this

chenyu2202863 2007-04-29 01:55:40
#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
...全文
192 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
oyd 2007-04-29
  • 打赏
  • 举报
回复
这只是一个警告,而实际上在你这种情况下,这个警告不应该出。属于VS2005编译器比较弱导致的。
该警告的原意是为了避免对象还没有初始化完成时,就去引用它的数据成员。
但是,楼主初始化列表中p_prev及p_next都属于内置类型,完全不存在上面说的这个问题。

以上纯属猜测,楼主问问题应当把编译器信息贴出来,因为不是每个人都恰好有VS2005。
fallinleave 2007-04-29
  • 打赏
  • 举报
回复
初始化列表中的数据是在类构建之前。此时this指针没有意义
Jofee 2007-04-29
  • 打赏
  • 举报
回复
编译器具体给出的错误贴上来看看?
我用gcc测试的warning是初始化列表和变量在类中被定义的顺序不一样,有可能会造成问题。
ouyh12345 2007-04-29
  • 打赏
  • 举报
回复
初始化时,用NULL比较好拔。
taodm 2007-04-29
  • 打赏
  • 举报
回复
正常。因为构造函数还没有完成,通过this调用任何东西都可能触发bug。
于你此处,没有问题的,可以忽略这个warning。

64,683

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧