我有一个只有一个构造函数的类中的对象,这个构造函数接受一个指向由我的类实现的接口的指针。所以,我希望把它初始化列表:我该如何初始化?
: thatObject(this)
但是,这给了我一个警告,我能够理解为什么给出一个指向未构造的类是不是一个好主意。所以问题是,我该怎么做?我应该这样做:
: thatObject(NULL)
{
thatObject = TheClass(this);
}
处理这个问题的正确方法是什么?
感谢
我有一个只有一个构造函数的类中的对象,这个构造函数接受一个指向由我的类实现的接口的指针。所以,我希望把它初始化列表:我该如何初始化?
: thatObject(this)
但是,这给了我一个警告,我能够理解为什么给出一个指向未构造的类是不是一个好主意。所以问题是,我该怎么做?我应该这样做:
: thatObject(NULL)
{
thatObject = TheClass(this);
}
处理这个问题的正确方法是什么?
感谢
如果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
一般来说,它不是必须在父类的指针,孩子是个好主意。如果您需要使用该指针来获取某些信息或执行某些操作,请在父亲中写入一个虚拟函数,然后在孩子中实现并调用该函数。
如果你真的真的要做到这一点,你认为自己的方法工作得很好:
: thatObject(NULL)
{
thatObject = TheClass(this);
}