2014-02-25 24 views
3

創建類的對象的最常用方法是使用new關鍵字。它也調用構造函數。 但是,如果我們使用malloc函數來創建對象,構造函數不會被調用。使用malloc創建對象後是否仍可以手動調用構造函數?是否可以手動調用C++中的類的構造函數?

+3

那麼,你可以使用新的位置。但是,不確定你具體是什麼,因爲它基本上只是重新實現'new'。 – chris

+0

是的,它被稱爲[放置新](https://stackoverflow.com/questions/222557/what-uses-are-there-for-placement-new) – David

+5

我會想象在堆棧上創建對象比創建他們動態。 – jliv902

回答

7

這聽起來像你想調用構造函數一個由malloc創建的一塊內存。這是可能的,被稱爲放置新

void* pMemory = malloc(sizeof(C)); 
C* pValue = new (pMemory) C(); 
+0

爲什麼要將C功能與C++混合?用這樣的東西分配是不是更好:'void * pMemory = new char [sizeof(C)]' – SomeWittyUsername

+0

_Technically_只能間接調用構造函數。值得一提的是 –

+0

@icepack:那會更好些?對我來說看起來有點奇怪。在這種情況下'malloc'完全符合要求,並且爲它分配內存。當你想要一個字符數組時,你可以使用'new char []',在這種情況下不需要。 –

2

您不能直接調用構造函數,你會一些其他的功能,因爲構造函數沒有名稱。

什麼是你可以使用的位置新,這將調用你的構造函數提供的內存提供新的位置。

相關問題