Comprensión personal del concepto de "manejar"

La palabra "handle" se traduce de "handle". Esta palabra debe usarse como un sustantivo en lugar de un verbo en programación. En inglés, handle como sustantivo significa "xxx handle / xxx handle". En programación, se usa a menudo handle para la gestión de recursos, manejador de recursos / manejador de recursos, puede entenderse como sostener el manejador / manejador para controlar el recurso, a través del manejador para controlar el recurso, C ++ es un lenguaje orientado a objetos, en C ++, el manejador puede entenderse como un Objeto de gestión de recursos.

El capítulo 13.3 de "C ++ Programming Language 4th Edition" da un ejemplo, que es más o menos así:

#define debug qDebug()<<
int main(int argc, char *argv[])
{
    QFile f("d://测试.txt");
    f.open(QFile::ReadOnly);
    QByteArray array = f.readAll();
    debug QString(array);
    //......其他操作
    f.close();
}

Este código parece muy simple, pero si se lanza una excepción para interrumpir el programa al realizar otras operaciones, los recursos adquiridos por el programa no serán liberados. Una forma de solucionar este problema es utilizar un mecanismo de gestión de excepciones para liberar recursos cuando se gestionan excepciones, y otra forma es utilizar identificadores de recursos.

La operación específica es definir una clase local, administrar recursos en la clase local, solicitar recursos en el constructor y liberar recursos en el destructor. Para los objetos en la memoria de la pila, incluso si ocurre una excepción y el programa se interrumpe, el El análisis del objeto se denominará Constructor. Esto asegura que se liberarán recursos.

#define debug qDebug()<<
int main(int argc, char *argv[])
{
    class FileHander
    {
    public:
        FileHander(const QString & filePath)
        {
            file = new QFile(filePath);
            if(!file->open(QFile::ReadOnly))
            {
                debug "打开文件失败";
            }
        }
        ~FileHander()
        {
            if(file)
            {
                if(file->isOpen())
                {
                    file->close();
                }
                file->deleteLater();
                debug "FileHander 释放资源";
            }
        }
        QByteArray getFileAllData()
        {
            if(!file || !file->isOpen())
            {
                return QByteArray();
            }

            return file->readAll();
        }
    private:
        QFile * file{nullptr};
    };

    FileHander fhander("d://测试.txt");
    QByteArray array2 = std::move(fhander.getFileAllData());
    debug QString(array2);
}

La clase local FileHander aquí actúa como un manejador. El uso de recursos se realiza a través de FileHander, y los recursos se solicitan / liberan en el constructor / destructor.

Supongo que te gusta

Origin blog.csdn.net/kenfan1647/article/details/114074778
Recomendado
Clasificación