about:placement new
> 其中的new(__p) _Tp(__val)我很不理解?
這種 new 稱為 placement new。在 C++ Primer 3/e 8.4.5節可以查到,Thinking in C++ 上應該也有描述。
意思是,在一塊 allocated memory(由例中的 __p 指向)取足夠空間建構一個新的 object,並以 __val 為初值。
而不像一般的 new 在操作當時才從 heap 中分配空間。
使用它之前,必須先 #include <new>。
#include <new>
class Foo;
...
char* buf = new char[500]; // 分配一塊空間,500 bytes
Foo* pb1 = new(buf) Foo(abc); // 從 buf 所指空間開始,建構一個 Foo object(將耗用 sizeof(Foo)),以 abc 為初值。
buf += sizeof(Foo); // 移動 pointer
Foo* pb2 = new(buf) Foo(def); // 從 buf 所指空間開始,建構一個 Foo object(將耗用 sizeof(Foo)),以 def 為初值。
-- 侯捷
----- Original Message -----
From: sunyong
To: jjhou
Sent: Thursday, February 24, 2005 3:20 PM
Subject: about:new(__p) _Tp(__val)
侯先生,你好:
我在stl_alloc.h文件中看到这么一行代码
void construct(pointer __p, const _Tp& __val) { new(__p) _Tp(__val); }
其中的new(__p) _Tp(__val)我很不理解?我也自己做了个例子,结果也
不能编译。能否帮忙解释一下?
孙永
Best regards,