【问题标题】:QSharedPointer::create()QSharedPointer::create()
【发布时间】:2015-10-22 20:55:42
【问题描述】:

在 Qt 4 中,我有以下数组:

QSharedPointer<unsigned char> encrypted(new unsigned char[RSA_size(publickey)]);

如何将这两个分配与新的 Qt 5 创建函数合二为一?

QSharedPointer<T> QSharedPointer::create()

【问题讨论】:

    标签: c++ qt pointers qt5 qsharedpointer


    【解决方案1】:

    您的第一个示例是错误的,不仅会泄漏内存,还会导致 UB。当您定义 QSharedPointer&lt;unsigned char&gt; 时,您正在为单个元素而不是元素数组定义 智能指针,因此将调用 delete,而不是 delete[]

    改成:

    QSharedPointer<unsigned char> encrypted(new unsigned char[RSA_size(publickey)], [](unsigned char* x){ delete[] x; });
    

    即:您必须为指针提供自定义删除器。

    最后,QSharedPointer::create 函数应该只用于一个元素,而不是一个元素数组,它可以用于:

    auto x = QSharedPointer<unsigned char>::create();
    

    【讨论】:

    • 我在文档中找不到这个方法,请给个链接好吗?
    猜你喜欢
    • 1970-01-01
    • 2011-03-30
    • 1970-01-01
    • 1970-01-01
    • 2016-03-21
    • 2012-09-19
    • 1970-01-01
    • 2017-06-09
    • 2016-11-06
    相关资源
    最近更新 更多