我有以下代码:
QPair<QSharedPointer<unsigned int>, int> someclass::somefunction() {
int siz = data_size();
QSharedPointer<unsigned int> buffer(new unsigned int[siz]);
// Fill the buffer...
return qMakePair(buffer, siz);
}
在某些时候,此函数返回的QSharedPointer
将超出范围,并且构造函数中设置的指针将被释放。使用valgrind 3.6.1,我得到一个“不匹配的free()/ delete / delete []”错误。我使用QSharedPointer
是否有任何问题,或者我只需忍受这个valgrind警告?
答案 0 :(得分:11)
解决此问题的一种方法是编写自定义删除工具并将其传递给QSharedPointer
的构造函数,如下所示:
template <typename T_>
void do_delete(T_ buf[])
{
delete[] buf;
}
然后
QSharedPointer<unsigned int> buffer(new unsigned int[siz], do_delete<unsigned int>);
我不确定是否有更优雅的解决方案(这会很好)