在c ++中表达new(& t)T(t)的& t是什么意思?
标题为。
T t;
new (&t) T(t);
答案 0 :(得分:4)
这被称为'placement new'语法。 T
值由&t
指定的地址构造。
这个示例有点偏,因为它使用复制构造函数在现有T的确切位置创建了一个新的T.我认为用明确的地址来解释这个概念更容易。以下是此代码的变体。
T t;
void* pAddress = malloc(sizeof(T));
new (pAddress) T(t);
// Or just creating a T without a copy ctor
new (pAddress) T();
答案 1 :(得分:2)
这是placement new的示例,其中容器是使用类型t
T
的起始地址
示例代码使用复制构造函数创建类型为T
的对象,该构造函数接受类型T
的参数,并将对象放置在对象t
的内存位置。
想象一下Idea,将Type视为整数,因此模板代码看起来像
int t;
new (&t) int(t);
显然,新布局是多余的,令人困惑。编写这样一个奇怪代码的唯一原因可能是强制使用Copy Constructor初始化对象,除了复制用户可能感兴趣的对象内容之外,还可能有一些额外的代码。 / p>
答案 2 :(得分:2)
这是Placement Syntax
;这句话:
new (&t) T(t);
在t
(&t
)的地址构造一个对象,但它不分配内存。