4

我有以下代码:

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 警告?

4

1 回答 1

11

解决此问题的一种方法是编写自定义删除器并将其传递给构造函数,QSharedPointer如下所示:

template <typename T_>
void do_delete(T_ buf[])
{
    delete[] buf;
}

接着

QSharedPointer<unsigned int> buffer(new unsigned int[siz], do_delete<unsigned int>);

我不确定是否有更优雅的解决方案(这会很好)

于 2011-10-24T12:44:39.397 回答