Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 是否可以为QObject的父对象使用共享指针?_C++_Qt_Qobject - Fatal编程技术网

C++ 是否可以为QObject的父对象使用共享指针?

C++ 是否可以为QObject的父对象使用共享指针?,c++,qt,qobject,C++,Qt,Qobject,我有一个启动类,它在构造中设置了一个SystemController: m_systemController(new SystemController(this, Provider::getSettingsAsSingleton())), 这基本上满足了: public: explicit SystemController(QObject *parent,

我有一个启动类,它在构造中设置了一个
SystemController

m_systemController(new SystemController(this,
                                                 Provider::getSettingsAsSingleton())),
这基本上满足了:

public:
        explicit SystemController(QObject *parent,
                                  Settings& config);
不过,我最近想在线程类中使用这个类,这不希望我将
SystemController
传递给我,因为线程类没有父类。我试着这样传递:

public:
explicit DataTestWorker(QObject *parent=0);//,
                                //SystemController &sysCtrl); //Obviously in my setup, it would complain about this
其中,
DataTestWorker
类实际上是线程类,在
DataTest
类中初始化。我想传递
SystemController
的内存位置的原因是,Controller类中已经设置了重要数据,我希望访问这些数据,而不必再次运行其中的所有初始化方法

有没有一种方法可以通过某种方式传递某种“共享”指针,不仅这个类可以通过它,其他类也可以通过它来访问它。我能想到的唯一解决方法是,我可以使用
DataTest
DataTestWorker
类之间的信号和插槽来操作
SystemController
中的值,但这将是冗长的


有什么想法吗?如果您需要更多信息,只需询问。

您可以将
SystemController
设置为,并将
QMutex
防护设置为访问并发线程中使用的
SystemController
私有数据

是否可以为QObject的父对象使用共享指针

不存在。没有作为QObject子类的共享指针。我不明白为什么这会有意义

我希望传递SystemController的内存位置的原因, 控制器类是否已在类中设置了重要数据, 我希望在不运行所有初始化的情况下访问它 方法再次在它里面

为什么不将
SystemController settings
的概念分离到另一个POD类\struct中呢。那么你可以选择任何一种

class SystemController : public QObject, public SystemSettings


并按照您的意愿进行设置

我会再试一次,但我记得当我尝试它时,编译器抛出了一个错误,因为它在构造函数中使用了
设置
单例。我再试试。我只是好奇,看看是否有一种替代的/更好的方法不使用单例。99.9%的情况下这是一个坏主意。@UmNyobe-有什么想法吗?
我最近想在线程类中使用这个类,这不喜欢我把SystemController传递给我,因为线程类没有父类
,这一行很难理解,
DataTestWorker
类没有父类。如果我将
SystemController
传递给它,编译器会抱怨我无法传递
SystemController
的地址,因为
DataTestWorker
没有父对象。如果我在
DataTestWorker
中创建一个新的
SystemController
实例,它就会起作用,但这违背了我尝试执行的目的。明白了吗?如果只需要一个
设置
类的实例和一个
系统控制器
的实例,您会怎么做?我现在正在读关于共享指针的书,但我不确定这是否是正确的方向。事实上,我想我刚刚意识到你的意思。你的意思是我应该创建一个SystemController设置类,它将我的变量保存在一个简单的POD中?是的,一个只用于重新组合这些变量的类。没有信号。没有空位。没有复杂的逻辑。这个
SystemSettings
类可以通过第二个设计选项由SystemController发送信号。@UmNyobe,我认为您应该在答案中添加“SystemSettings类可以通过SystemController发送信号”
class SystemController : public QObject
{
   SystemSettings m_settings;
   SystemSettings systemSettings() {m_settings};

}