我是否要删除函数范围内的内存?



问题1:如何在不损坏返回的情况下从内存中删除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:我是否要删除答题器并从函数内的内存中点击?

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

问题3:我是否删除有指针的记忆?例:

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

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

对于第二部分,请注意 const 关键字,该关键字指示您无法修改方法中的值。

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

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

关于问题 1,您不能删除该对象,因为如果您这样做,那么您返回的内容将被删除。

事实上,一旦

函数终止,res就会超出范围。

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

最新更新