• 3266阅读
  • 3回复

执行meta->newInstance()内存暴增问题 [复制链接]

上一主题 下一主题
离线xcguo
 

只看楼主 正序阅读 楼主  发表于: 2015-03-12
目前,项目内存泄漏较大,经过排查,定位在了如下代码处:

QMetaObject *meta = &_workctrl_impl::metaObjects.value( type )->object;
        // bug
        return meta->newInstance(convertToARG(val0), convertToARG(val1), convertToARG(val2),
                                 convertToARG(val3), convertToARG(val4), convertToARG(val5),
                                 convertToARG(val6), convertToARG(val7), convertToARG(val8),
                                 convertToARG(val9));
在执行meta->newInstance()这步,内存增加近20兆,且不会释放,最后导致程序崩溃,请大牛指教!救急,在线等
离线goodname

只看该作者 3楼 发表于: 2015-03-12
顺便补充一下,如果新生成的类指定了parent的话,当parent析构的时候,子对象也会被清理。
如果没有,应该自己手动释放。
离线goodname

只看该作者 2楼 发表于: 2015-03-12
自己写了个例子,简单调试了一下。
newInstance其实是new出了一个新的对象。
因此最终应该delete掉。
离线begboy

只看该作者 1楼 发表于: 2015-03-12
xcguo,您好!
      由于没有程序上下文,不是很了解您们的意思。
      而我们使用QMetaObject 对象 newInstance()的方式一般如下:

         QMetaObject metaObject = CResultSet::staticMetaObject;
         QObject* cRS = metaObject.newInstance();  
        
        另据我们查看QMetaObject源码,最终编译结果其实是通过
C的结构体实现的。
       希望能帮上点忙。
      祝好运!

     begboy
快速回复
限100 字节
 
上一个 下一个