2011-09-14 101 views
2

我有一个只有一个构造函数的类中的对象,这个构造函数接受一个指向由我的类实现的接口的指针。所以,我希望把它初始化列表:我该如何初始化?

: thatObject(this) 

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

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

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

感谢

回答

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 
0

一般来说,它不是必须在父类的指针,孩子是个好主意。如果您需要使用该指针来获取某些信息或执行某些操作,请在父亲中写入一个虚拟函数,然后在孩子中实现并调用该函数。

如果你真的真的要做到这一点,你认为自己的方法工作得很好:

: thatObject(NULL) 
{ 
    thatObject = TheClass(this); 
} 
相关问题