我是否删除了功能范围内的记忆?

时间:2015-01-13 17:30:30

标签: c++ memory-leaks

问题1:如何在不破坏退货的情况下从内存中删除资源?

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并从内存中单击了该功能?

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;
}

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

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

关于问题1,您无法删除该对象,因为如果您这样做,则会删除您返回的内容。

事实上,只要函数终止,res就会超出范围。

问题3:不,你没有,因为它已经是NULL。