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

what is the meaning for &t for expression new (&t) T(t) in c++?

本文关键字:是什么 意思 C++ new      更新时间:2023-10-16

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

如标题所示。

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

这称为"放置新"语法。 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();
这是

Placement Syntax;此声明:

new (&t) T(t);

在地址t&t ) 处构造一个对象,但它不分配内存。

这是放置 new 的示例,其中容器是使用 Type T 创建t对象的起始地址

示例代码使用复制构造函数创建类型 T 的对象,该构造函数接受类型 T 的参数并将对象放在对象t的内存位置。

只是为了构思这个想法,将 Type 视为一个整数,所以你的模板代码看起来像

int t;
new (&t) int(t);

所以显然,新的放置是多余的和令人困惑的。编写这种奇数代码的唯一原因可能是使用复制构造函数强制初始化对象,除了复制用户可能感兴趣的对象的内容外,该构造函数可能还有一些额外的代码