gpt4 book ai didi

c++ - 在构造函数的初始化列表中使用 "this"对 Qt 特别危险吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:52:45 26 4
gpt4 key购买 nike

我需要关于“这个”主题的可靠信息:

class MyClass, public QWidget
{
public:
MyClass( QWidget * parent = NULL )
:QWidget( parent ),
mpAnotherWidget( new QWidget( this ) ){};
private:
QWidget * mpAnotherWidget;
};

当然,在构造器或初始化列表中调用虚函数不是一个好主意。问题是:这段代码可以吗

mpAnotherWidget( new QWidget( this ) )

导致未定义的行为?!如果是这样:为什么?

如果可以,请引用您的消息来源!谢谢!

最佳答案

这取决于 QWidget 对给定的指针执行的操作。只要调用的代码不访问底层对象,就可以传递指向半构造对象的引用或指针。您需要查看 QWidget 的文档以了解它是接触对象还是仅存储指针。


在Qt的特殊情况下,阅读文档,它正在调用QWidget的构造函数,参数是类型QWidget*this 仅用于转换为基指针。在 12.7/3 中保证获取指向基的指针,因为转换的要求是X 的构造以及直接或间接派生自 B 的所有直接或间接基的构造应该已经开始。然后指针被传递给 QWidget 构造函数,它可以以任何它想要的方式使用它,因为基础 QWidget 的构造函数已经在 的构造函数之前完成>mpAnotherWidget 启动。

关于c++ - 在构造函数的初始化列表中使用 "this"对 Qt 特别危险吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29389810/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com