如何使用新语法[关闭]

2024-02-26

当我读一些文章时,我发现这句话是如此神秘。

new (new_ptr + i) T(std::move(old_ptr[i]));

有人可以解释一下这个语法是如何工作的吗?


好消息是,没有一个是新语法(但所有这些都是new语法,呵呵!)。 C++11 中引入了一个正在使用的函数,std::move,但仅此而已。

该行的语法称为放置new并且已经存在了一段时间了。它允许您在某些时候创建一个对象已分配内存中的空间。这里,已经分配的内存由指针给出new_ptr + i。正在创建的对象的类型是T.

放置 new 的一个简单且毫无意义的示例是:

int* p = new int(); // Allocate and initialise an int
new (p) int(); // Initialise a new int in the space allocated before

的构造函数T正在通过std::move(old_ptr[i])。假设old_ptr指向类型对象T,这一举动允许移动构造函数 of T用于创建对象。它基本上假装old_ptr[i]是暂时的T对象(即使实际上可能不是),允许新的T从中窃取。要了解更多相关信息,请查找移动语义 https://stackoverflow.com/questions/3106110/can-someone-please-explain-move-semantics-to-me.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用新语法[关闭] 的相关文章

随机推荐