2016-03-28 43 views
-5

可能的解決方案是重載新運算符並將其設置爲私有,以防止您調用新運算符。如何確保對象總是在C++中分配到堆棧中

但讓我們說即使新的叫我想要對象分配在堆棧上。可能嗎 ?

+0

有什麼用例爲這個? –

+0

您可以重載'operator new',以便使用堆棧上的內存池。 – vsoftco

+3

C++中沒有「堆棧」。一個類型通常不能控制其實例的存儲時間。 (例如考慮全局變量。) –

回答

1

捲起註釋到某種形式的答案:

但是讓我們即使有新的叫我想成爲堆棧分配的對象說。可能嗎 ?

嚴格地說,在C++內存模型中沒有堆棧的概念,但讓我們假設您的意思是「不允許動態分配對象」。

簡短的回答是「不,它不可能阻止它」。即使自定義new令人費解的技巧也不會幫助你。

雖然這可能看起來像一個令人沮喪的答案,但它實際上是一件好事。對象的功能與其生命週期和存儲位置有關。允許對象指定它的生命期將混合兩個關注點,並使對象不那麼有用。

如果您想動態分配堆棧中的對象以增加(或保證)性能,那麼您將需要爲該作業創建自定義分配器。即自定義分配器可以包含一個內存塊,您的類的模型可以在其中就地構建。

安德烈Alexandrescu的介紹了一個很好的談話:https://www.youtube.com/watch?v=LIb3L4vKZ7U