我的类中有一个只有一个构造函数的对象,这个构造函数接受一个指向我的类实现的接口的指针。所以我想把它放在初始化列表中:
: thatObject(this)
但是这给了我一个警告,我可以理解为什么指向一个未构造的类并不是一个好主意。所以问题是,我该怎么办?我应该这样做:
: thatObject(NULL)
{
thatObject = TheClass(this);
}
处理这个问题的正确方法是什么?
由于
答案 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);
}