memory leaks
fishsclue opened this issue · 2 comments
fishsclue commented
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();
}
casbin-bot commented