arn*_*rne 4 c++ qt smart-pointers qsharedpointer
我有以下代码:
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);
}
Run Code Online (Sandbox Code Playgroud)
在某些时候,QSharedPointer
此函数返回的内容将超出范围,构造函数中设置的指针将被释放.使用valgrind 3.6.1,我得到一个"不匹配的free()/ delete/delete []"错误.我的使用是否有任何问题,QSharedPointer
或者我是否必须忍受这种valgrind警告?
arn*_*rne 11
解决此问题的一种方法是编写自定义删除器并将其传递给QSharedPointer
类似的构造函数:
template <typename T_>
void do_delete(T_ buf[])
{
delete[] buf;
}
Run Code Online (Sandbox Code Playgroud)
然后
QSharedPointer<unsigned int> buffer(new unsigned int[siz], do_delete<unsigned int>);
Run Code Online (Sandbox Code Playgroud)
我不确定是否有更优雅的解决方案(这会很好)