【发布时间】:2013-09-10 11:21:00
【问题描述】:
我正在使用 boost::enable_shared_from_this 模板在两个类之间创建一个 mixin。所以我在这个类中添加了一个新功能:
class MyOldClass :
public Connection,
public boost::enable_shared_from_this<MyOldClass>
{ ... };
我之前确实将它用于普通类(不是 QtObject,只是一个 C++ 普通类)并且一切正常。
但是现在我对 QMainWindow 做同样的事情,它基本上崩溃了:
class MainWindow :
public QMainWindow,
public Connection,
public boost::enable_shared_from_this<MainWindow>
{ Q_OBJECT ... };
使用 QObject 执行此操作是否有任何问题?不知道为什么会这样。
谢谢。
【问题讨论】:
-
您能说得更具体些吗?它在哪里崩溃,您观察到什么异常等?
-
谢谢伊戈尔。 Connection 类有一个称为 getSharedPtr() 的纯虚方法。然后在 MainWindow 中实现此方法,只返回类型为 boost::shared_ptr
的 shared_from_this()。如果我在 Connection 类上声明了一个测试方法:getSharedPtr();我从 MainWindow 类调用这个测试方法,它崩溃了。所以问题似乎与从 MainWindow 检索 shared_from_this() 指针有关。 -
@user1963961 在调用
shared_from_this()之前,在任何地方创建的窗口是否是shared_ptr?而且无论如何,Qt 通常都有自己的所有权方案(父母拥有孩子),因此将其与shared_ptr所有权方案混合需要非常仔细设计。 -
@Angew 不,它只被调用一次。
标签: c++ qt boost shared-ptr qobject