2010-04-04 73 views
1

我目前正在使用C++中的一些簡單的自定義分配器,它通常可以工作。我也重載了新的/刪除操作符來從我自己的分配器分配內存。反正我碰到一些場景,我真的不知道哪兒來存儲來自這樣的:C++鏈接函數中的臨時分配到自定義分配器?

void myFunc(){ 
      myObj testObj(); 
      ....do something with it 
    } 

在這種情況下testObj將只在函數內部有效的,但如果將它的內存從何而來?無論如何,我可以將它鏈接到我的分配器?我必須創建對象使用新的和刪除或有另一種方式嗎?

感謝

回答

4

myObj testObj();聲明瞭一個名爲testObj它返回一個myObj功能。使用myObj testObj;代替。)

的內存來自堆。當離開示波器時它將被auto破壞。


要使用newdelete你當然必須調用newdelete的:

myObj* p_testObj = new myObj; 
... 
delete p_testObj; 

但在堆棧分配是最有效的,因爲它只是涉及到1個指令sub esp, ??。我沒有看到使用自定義分配的理由,除非myObj是巨大的。

+0

testObj後的括號沒有那麼有效嗎? – 2010-04-04 20:22:50

+0

我只是問,因爲我想分配我的所有記憶在一個地方。 - 我會propably將使用新/刪除然後。我寫的不是一個函數,而是一個簡單的調用構造函數:) – moka 2010-04-04 20:26:51

+1

@Matti:是的,但不是你想要的:http://www.parashift.com/c++-faq-lite/ctors.html#faq -10.2 – kennytm 2010-04-04 20:33:11