2015-01-13 40 views
-1

問題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; 
} 
+0

................什麼?!?! –

回答

0

問題2是我們無法回答的問題,因爲我們缺乏信息。

關於問題1,您不能刪除對象,因爲如果您這樣做,那麼您返回的內容將被刪除。

事實上,一旦函數終止,res就會超出範圍。

問題3:沒有,因爲它已經是NULL。

+0

我知道! :-( 這就是我想得:。。/ 順便說一句,我更新了另外一個問題,如果有人(或你)可以回答這個問題,我會在大深度:) – user4136548

+0

歡迎您@ user4136548,我回答你的更新也是! – gsamaras

+0

非常感謝!你爲我節省了很多精力和力量。 xD – user4136548

1

如果您之前刪除了該地址,則無法使用返回地址,但如果您在返回之前讓它在活動中生效,則可以輕鬆地從外部控制內存。

對於第二部分,請注意關鍵字const,表示您不能修改方法內的值。

請記住,最好從方法範圍外或專用方法中管理內存(創建和刪除)。