我是否删除函数范围内的记忆?

Do I delete memories inside a function's scope?

问题 1:如何在不损坏 return 的情况下从内存中删除 res?

Class1 *GetType(Class1 type)
{
    Class1 *res = nullptr;
    switch (type)
    {
        case SCRIPTS_SPELL:
        {
            res = &sSpellScripts;
            break;
        }
        case SCRIPTS_EVENT:
        {
            res = &sEventScripts;
            break;
        }
        case SCRIPTS_POINT:
        {
            res = &sWaypointScripts;
            break;
        }
        default:
        {
            break;
        }
    }
    return res;
}

问题2:是否在函数内部从内存中删除clicker和click?

bool Class2::IsFitToRequirements(Unit const *clicker, Unit const *click) const

问题三:是否删除有指针的内存?示例:

QueryResult result = Database.Query(some query);
if (!result)
{
    delete &result; // Should I or not?
    return;
}

问题 2 是我们无法回答的问题,因为我们缺乏信息。

关于问题1,你不能删除对象,因为如果你删除了,那么你return的东西就被删除了。

事实上,res函数一结束就会超出范围。

问题 3:不,你不知道,因为它已经是 NULL。

如果您之前删除了 returning 地址,您将无法使用它,但如果您在 return 之前让它存活,您可以轻松地从外部控制内存。

对于第二部分,注意 const 关键字,它表示您不能修改方法内的值。

请记住,最好从方法范围外部或专用方法中管理内存(创建和删除)。