0
点赞
收藏
分享

微信扫一扫

C++ QT结合FFmpeg实战开发视频播放器-06QT的智能指针QScopedPointer及Reset方法的使用


作者:虚坏叔叔

早餐店不会开到晚上,想吃的人早就来了!😄

一、智能指针QScopedPointer

为了测试智能指针的​​析构​​,我们定义一个

class SPA
{
public:
SPA()
{
qDebug() << "SPA::SPA()" << endl;
}
~SPA()
{
qDebug() << "SPA::~SPA()" << endl;
}
void Print()
{
qDebug() << "SPA::Print()" << endl;
}
};

然后再​​main​​函数中定义一个基于这个类的智能指针:

int main(int argc, char *argv[])
{
{
QScopedPointer<int> i(new int(3));
QScopedPointer<SPA> spa(new SPA);

}

return 0;
}

通过调试运行发现,会自动的调用析构函数,实现内存的释放

C++ QT结合FFmpeg实战开发视频播放器-06QT的智能指针QScopedPointer及Reset方法的使用_Visual studio

二、智能指针常见函数Reset的使用

int main(int argc, char *argv[])
{
{
QScopedPointer<int> i(new int(3));
qDebug("the value of str i:%d", *i);
i.reset(new int(4));
qDebug("the value of str i:%d", *i);
}

return 0;
}

可以看到完成了指针所有权的转移:

C++ QT结合FFmpeg实战开发视频播放器-06QT的智能指针QScopedPointer及Reset方法的使用_机制_02

三、智能数组指针

int main(int argc, char *argv[])
{
{
QScopedArrayPointer<SPA> spArr(new SPA[10]);
}

return 0;
}

运行可以看到,出了大括号,​​10​​​个​​SPA​​的对象析构函数都被调用了:

SPA::SPA() 
SPA::SPA()
SPA::SPA()
SPA::SPA()
SPA::SPA()
SPA::SPA()
SPA::SPA()
SPA::SPA()
SPA::SPA()
SPA::SPA()
SPA::SPA()

SPA::~SPA()
SPA::~SPA()
SPA::~SPA()
SPA::~SPA()
SPA::~SPA()
SPA::~SPA()
SPA::~SPA()
SPA::~SPA()
SPA::~SPA()
SPA::~SPA()
SPA::~SPA()

四、总结

  • 本文使用的智能指针会在后面的播放器源码中经常使用 。
  • 本文主要讲解了智能指针QScopedPointer以及它的常用方法。



举报

相关推荐

0 条评论