C++ 如何在QT中从QByteArray和QByte流中释放内存

C++ 如何在QT中从QByteArray和QByte流中释放内存,c++,qt,memory,C++,Qt,Memory,我想知道如何从QT中释放QByteArray和QbyTestStream,特别是在以下代码片段: QByteArray DicResourceByteArray; QDataStream out(&DicResourceByteArray, QIODevice::WriteOnly); QString encoded; out.writeRawData(DicBlock.data + pos, DicBlock.length - pos); encoded =

我想知道如何从QT中释放QByteArray和QbyTestStream,特别是在以下代码片段:

  QByteArray DicResourceByteArray;
  QDataStream out(&DicResourceByteArray, QIODevice::WriteOnly);

  QString encoded;
  out.writeRawData(DicBlock.data + pos, DicBlock.length - pos);


  encoded = QString(DicResourceByteArray.toBase64());

根据概念,一旦超出范围,所有内容都将自动发布。如果要显式释放内存,请调用
clear()
之类的函数,但这是不必要的-所有清理都将在
QByteArray
的析构函数中完成。与QDataStream情况相同。。。还请注意,这是一种非常受欢迎的编码风格——当您创建自己的类时,请尝试这样做。管理类似C的指针可以省去很多麻烦。

当对象超出范围时,QByteArray所持有的内存会自动释放。 QDataStream只是访问QByteArray的一种方式,因此它本身没有数据(它可以使用一些缓冲区用于内部目的,但您不必管理它们) 可以使用clear()清除QByteArray内容。
您还可以使用reserve()和resize()来调整内存使用情况,但大多数情况下不需要它们

此外,作为对前面问题的补充,QString使用共享数据存储。这意味着具有相同数据的多个字符串将只占用一个内存块,而不是多个内存块。因此,如果删除该字符串后内存使用量仍然很大,这意味着还有另一个字符串指向该数据。要释放内存,您需要销毁所有引用字符串数据的对象。@鹰眼:不应该这样做,因为数据仍然需要。In Line:encoded=QString(DicResourceByteArray.toBase64());执行后会得到60MB。不,这是数据共享的示例,没有内存开销。首先,创建字符串数据。然后数据指针指向第二个字符串,第三个,临时字符串正在被销毁。所以我们一直只有一个数据实例。这个类创建我的字典数据库,当创建数据库时,它应该释放内存,但它没有。它是增长内存,从不释放内存,我一直在为创建DB的主类调用delete,但仍然没有释放内存,请帮助我