this指针问题

lxdfigo 2010-04-29 06:44:14
我在构造函数成员初始列表中想传个该类的指针怎么办?

CA():m_par(this) //this不可以,因为还没构造出来,有什么替代的办法?
{
}
...全文
187 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
we_sky2008 2010-04-30
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 taodm 的回复:]
//this不可以,因为还没构造出来,有什么替代的办法?
this作为一个指针值,它已经初始化好了,但是this指向的东西还没初始化结束。
如果你真的只需要这个指针值,没问题,就这么用就可以了。
[/Quote]
恩,
说的很清楚
pengzhixi 2010-04-30
  • 打赏
  • 举报
回复
是可以放初始化列表的,只是你放初始化列表主要是为了什么目的呢
pengzhixi 2010-04-30
  • 打赏
  • 举报
回复
不明白LZ的用意
taodm 2010-04-30
  • 打赏
  • 举报
回复
//this不可以,因为还没构造出来,有什么替代的办法?
this作为一个指针值,它已经初始化好了,但是this指向的东西还没初始化结束。
如果你真的只需要这个指针值,没问题,就这么用就可以了。
dream17953 2010-04-30
  • 打赏
  • 举报
回复
我也遇到一类问题,就是不能在初始化列表中初始化一些类成员。
we_sky2008 2010-04-30
  • 打赏
  • 举报
回复

CA():m_par(this)
{
}

楼主说m_par是一个对象,具体是一个什么对象呢?
怎么用this指针来初始化?

lxdfigo 2010-04-29
  • 打赏
  • 举报
回复
会报出警告,但是我试验了程序运行正常,只是还是不想有警告。而且我的是一个类,声明为成员变量,如果不能在成员列表里初始化,只能声明为指针了。很麻烦。不知道有没有解决办法。
嘎文 2010-04-29
  • 打赏
  • 举报
回复
个人对无法在初始化列表中无法使用this表示不解,构造函数调用前内存肯定是已经分配了的,所以。。。。
we_sky2008 2010-04-29
  • 打赏
  • 举报
回复
可以测试下:

#include <iostream>
using namespace std;
class Data
{
public:
Data(int i = 0) : value(i), __this(this){}
Data *__this;
int value;
};

int main()
{
Data d;

cout<<&d<<endl<<d.__this<<endl;
system("pause");
return 0;
}
we_sky2008 2010-04-29
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 coffeecn 的回复:]
因为地址还没有分配,进入构造函数体后地址已经被分配,接着想干啥就干啥
[/Quote]
先分配内存,然后才调用构造函数的吧?
一般情况下,this指针是保存在ecx寄存器里的
然后才调用构造函数
CoffeeCN 2010-04-29
  • 打赏
  • 举报
回复
因为地址还没有分配,进入构造函数体后地址已经被分配,接着想干啥就干啥
we_sky2008 2010-04-29
  • 打赏
  • 举报
回复
为什么说在构造列表里this指针还没有初始化呢?
sinosinux 2010-04-29
  • 打赏
  • 举报
回复
那就构造后使用
CoffeeCN 2010-04-29
  • 打赏
  • 举报
回复
忘记删东西了,这个为准

CA()
{
m_par = this;
}
CoffeeCN 2010-04-29
  • 打赏
  • 举报
回复
不能放到初始化列表中,但是可以

CA():m_par(this)
{
m_par = this;
}
「已注销」 2010-04-29
  • 打赏
  • 举报
回复
构造之后,改用SetThisPtr()成员函数来做。

65,210

社区成员

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

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