QtQuick通过setContextProperty()会有内存泄漏的问题么?



  • RT,通过setContextProperty("myObject", new MyObject()),这里new出来的MyObject,怎么delete,在qml中只有调用读取操作,而没有delete的话,会有内存泄漏问题么?



  • @taadis 这种情况,你要自己实现一个MyObject::release()函数:

    Q_INVOKABLE void MyObject::release( void )
    {
        delete this;
    }
    

    这样就可以在QML中调用了。



  • @jiangcaiyang123 饿,这个我造了,其实我想问的是这个new MyObject()是在main函数里实例化的,会不会有内存泄漏问题,比如我程序退出了,qml里并没有专门delete的话. Qt应该不会自动释放吧?



  • @taadis 不会自动释放。
    参考:

    void QQmlContext::setContextProperty(const QString &name, QObject *value)
    Set the value of the name property on this context.
    QQmlContext does not take ownership of value.
    See also contextProperty().



  • @taadis

    setContextProperty("myObject", new MyObject(&app))

    QApplication 设置为 myObject 的父亲即可。

    如果 MyObject 不是 QObject ,那么就是自己设计的类,在 QML 中可以放心使用,前提是这个类设计在构造和析构上本身没有内存泄露的问题。



  • @qyvlik 嗯 我也是这样做的,是个QObject的继承类,用&app当爹刚刚好


登录后回复
 

与 萌梦社区 的连接断开,我们正在尝试重连,请耐心等待