我怎么能初始化这个?

时间:2011-09-14 23:35:15

标签: c++

我的类中有一个只有一个构造函数的对象,这个构造函数接受一个指向我的类实现的接口的指针。所以我想把它放在初始化列表中:

: thatObject(this)

但是这给了我一个警告,我可以理解为什么指向一个未构造的类并不是一个好主意。所以问题是,我该怎么办?我应该这样做:

: thatObject(NULL)
{
   thatObject = TheClass(this);
}

处理这个问题的正确方法是什么?

由于

2 个答案:

答案 0 :(得分:2)

如果保证thatObject永远不会取消引用给定的指针,直到它的构造函数完成,然后忽略或取消警告。如果您感觉不安全,保证将来不会取消引用指针,那么请使用第二个选项。

在MSVC中,压制警告的代码是:

#pragma warning(supress:4355)
: thatObject(this)

GCC更复杂:(未经测试,我没有GCC)

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Winit-self"
: thatObject(this)
#pragma GCC diagnostic pop

答案 1 :(得分:0)

一般来说,在父类中使用指向child的指针并不是一个好主意。如果你需要使用该指针来获取某些信息或做某事,可以在父亲中编写一个虚函数,在子文件中实现并调用它。

如果你真的必须这样做,你建议自己的方法可以正常工作:

: thatObject(NULL)
{
   thatObject = TheClass(this);
}