2012-04-05 56 views
3

可能重複的含義:
C++'s 「placement new」什麼是下面句子中的C++

在下面的代碼什麼呢線3代表,是類型轉換的方法是什麼?或者什麼

void someCode() 
{ 
    char memory[sizeof(Fred)];  // Line #1 
    void* place = memory;   // Line #2 

    Fred* f = new(place) Fred(); // Line #3 
    // The pointers f and place will be equal 

    ... 
} 
+3

Google展示位置新增。 – RedX 2012-04-05 17:32:40

+0

由於對齊要求,這不起作用。 'Fred'類型可能需要比'char'更嚴格的對齊方式。您應該使用'aligned_storage',而不是在C++ 11和TR1中提供。 – 2012-04-05 18:30:55

回答

3

這是Placement new典型用法。
它允許您分配內存,然後在該特定內存位置構造對象。

線#3本質上只是調用構造函數Fred::Fred()Fred構造函數中的this指針將等於place。返回的指針f因此將等於place

+0

嗨,Als,感謝您的回覆......這個指針指向Fred的指針將如何等於void *?, – Naruto 2012-04-05 18:08:24

+0

@LLL:這就是您的placement new的實現,它爲您指定了place的地址'到'f'。這是由新的展示位置提供的功能。 – 2012-04-05 18:10:42

+0

Thnx澄清..這個笏我想.. – Naruto 2012-04-05 18:11:39