在c ++中表达new(& t)T(t)的& t是什么意思?

时间:2014-01-07 05:35:31

标签: c++

在c ++中表达new(& t)T(t)的& t是什么意思?

标题为

T t;
new (&t) T(t);

3 个答案:

答案 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)的地址构造一个对象,但它不分配内存。