Lal*_*Box 6 c++ qt constructor this-pointer initialization-list
我需要关于“这个”主题的可靠信息:
class MyClass, public QWidget
{
public:
MyClass( QWidget * parent = NULL )
:QWidget( parent ),
mpAnotherWidget( new QWidget( this ) ){};
private:
QWidget * mpAnotherWidget;
};
Run Code Online (Sandbox Code Playgroud)
当然,在构造函数或初始化列表中调用虚函数是一个坏主意。问题是:这个代码可以吗
mpAnotherWidget( new QWidget( this ) )
Run Code Online (Sandbox Code Playgroud)
导致未定义的行为?!如果是这样:为什么?
如果可以,请引用您的来源!谢谢!
这取决于QWidget给定的指针的作用。只要被调用的代码不访问底层对象,就可以将引用或指针传递给半构造对象。您需要查看文档以QWidget了解它是接触对象还是仅存储指针。
在 Qt 的特定情况下,阅读文档,它正在调用 的构造函数QWidget,参数的类型为QWidget*,并且this仅用于转换为基指针。在 12.7/3 中保证获得指向基数的指针,因为转换的要求是X 的构造以及直接或间接从 B 派生的所有其直接或间接基数的构造应已开始。然后,该指针被传递给QWidget可以以任何想要的方式使用它的构造函数,因为基类的构造函数QWidget已经在启动构造函数之前完成mpAnotherWidget。
| 归档时间: |
|
| 查看次数: |
682 次 |
| 最近记录: |