casbin/casbin-cpp

memory leaks

fishsclue opened this issue · 2 comments

There is a memory leak when I call this function in a loop, how can I fix this

bool vBasePermissionsImpl::Enforce(const QVector& params)
{
std::vector<std::variant<std::string, std::shared_ptrnlohmann::json>> dataVector;

CleanDataVector(dataVector);

for(const auto& qStr : params)
{
    std::string str = qStr.toStdString();
    try
    {
        QJsonDocument jsonDoc = QJsonDocument::fromJson(qStr.toUtf8());
        if(!jsonDoc.isNull() && jsonDoc.isObject())
        {
            auto jsonPtr = std::make_shared<nlohmann::json>(nlohmann::json::parse(jsonDoc.toJson().toStdString()));
            dataVector.push_back(jsonPtr);
        }
        else
        {
            dataVector.push_back(str);
        }
    }
    catch (const std::exception&)
    {
        dataVector.push_back(str);
    }
}

bool result = e.Enforce(dataVector);


CleanDataVector(dataVector);

return result;

}

void CleanDataVector(std::vector<std::variant<std::string, std::shared_ptrnlohmann::json>>& dataVector)
{
for(auto& item : dataVector)
{
if(std::holds_alternative<std::shared_ptrnlohmann::json>(item))
{
auto jsonPtr = std::get<std::shared_ptrnlohmann::json>(item);
jsonPtr.reset();
}
}

dataVector.clear();

}

Dup with: #243