Der Staat docs erstellt befreien the following:Wie QByteArray mit fromRawData()
QByteArray nehmen nicht das Eigentum an Daten, so dass die QByteArray destructor wird nie die Rohdaten löschen, wenn auch der letzte QByteArray Bezug zu Daten wird zerstört.
In diesem Sinne, wie befreit man eine QByteArray
erstellt auf diese Weise?
Konzeptionell - ich denke, würde free()
auf den Zeiger über data()
oder constData()
anrufen, aber ich bin wirklich nicht sicher, ... hier ist ein Codebeispiel veranschaulicht den Anwendungsfall:
void doTest() {
QByteArray qba = partOne();
partTwo(qba);
finished(qba);
}
QByteArray partOne() {
char *dataPtr = (char *)malloc(64);
//do some stuff to dataPtr
QByteArray qba = QByteArray::fromRawData(dataPtr, 64);
//do some stuff to qba
return qba;
}
void partTwo(QByteArray qba) {
//do more stuff to qba
}
void finished(QByteArray qba) {
//this?
free((void *)qba.constData());
}
Die sehr prominentes Beispiel beginnt mit 'static const char mydata [] = {'. Wie würdest du das * befreien? –
Diese Frage ist mangelhaft ohne eine klare Aussage, warum Sie den Speicher zunächst über 'malloc' zuweisen. In C++ Code wäre es ein Antipattern. Sie kennen die 'QByteArray :: data()' Methode als eine Möglichkeit, mit Code zu interagieren, der einen rohen Zeiger benötigt, richtig? –
Betrachten wir einen Fall, in dem wir den Speicher nicht zuweisen, sondern stattdessen einen Zeiger auf zugewiesenen Speicher von einer Bibliothek erhalten und diese Daten als QByteArray an einen anderen übergeben müssen - vorzugsweise ohne zu kopieren. – davidkomer